button_to没有从params hash传递正确的id

button_to未将正确的id传递给line_item。 在下面的日志中,您会看到bike_id从正确的’86’变为不正确的’1’(巧合的是我的user_id)。 任何帮助,将不胜感激。 下面是我的development.log中的错误,然后是我的视图和控制器中的代码。 谢谢。

development.log

Started POST "/line_items?bike_id=86" for 127.0.0.1 at 2011-08-01 18:09:52 -0400

DEPRECATION WARNING: Setting filter_parameter_logging in ActionController is deprecated and has no longer effect, please set 'config.filter_parameters' in config/application.rb instead. (called from at /Users/willdennis/rails_projects/spinlister/app/controllers/application_controller.rb:8)

Processing by LineItemsController#create as HTML

Parameters: {"authenticity_token"=>"5GYQqvf7U5awhLrZ9Aw910ETf2kqOk3PI315jkjEfMU=", "bike_id"=>"86"}

[1m[35mCart Load (0.6ms)[0m SELECT "carts".* FROM "carts" WHERE ("carts"."id" = 8) LIMIT 1 [1m[36mBike Load (1.2ms)[0m [1mSELECT "bikes".* FROM "bikes" WHERE ("bikes"."id" = 86) ORDER BY bikes.created_at DESC LIMIT 1[0m [1m[35mSQL (0.5ms)[0m INSERT INTO "line_items" ("bike_id", "cart_id", "created_at", "updated_at") VALUES (1, 8, '2011-08-01 22:09:53.208978', '2011-08-01 22:09:53.208978') [1m[36mCart Load (1.5ms)[0m [1mSELECT "carts".* FROM "carts" WHERE ("carts"."id" = 8) LIMIT 1[0m Redirected to http://localhost:3000/carts/8 Completed 302 Found in 251ms

line_items_controller.rb

 def create @cart = current_cart @bike = Bike.find(params[:bike_id]) @line_item = @cart.line_items.build(:bike_id => @bike) respond_to do |format| if @line_item.save format.html { redirect_to(@line_item.cart, :notice => 'Line item was successfully created.') } format.xml { render :xml => @line_item, :status => :created, :location => @line_item } else format.html { render :action => "new" } format.xml { render :xml => @line_item.errors, :status => :unprocessable_entity } end end end 

意见/自行车/表演

  @bike), {:id => "rentthisbike"} %> 

bike.rb

 class Bike < ActiveRecord::Base belongs_to :user has_many :line_items attr_accessible :name, :description, :size, :biketype, :price, :photo, :id, :address, :city, :state, :zip, :latitude, :longitude, :neighborhood, :bike_id end 

line_item.rb

 class LineItem < ActiveRecord::Base belongs_to :bike belongs_to :cart accepts_nested_attributes_for :bike, :cart attr_accessible :bike_id, :bike, :cart, :name, :description, :size, :biketype, :price, :photo, :id, :address, :city, :state, :zip, :latitude, :longitude, :neighborhood end 

cart.rb

 class Cart  :destroy belongs_to :user accepts_nested_attributes_for :line_items attr_accessible :bike_id, :line_items, :name, :description, :size, :biketype, :price, :photo, :id, :address, :city, :state, :zip, :latitude, :longitude, :neighborhood end 

你可以尝试这段代码并从你的日志文件中发布@@@@行项目属性条目以及params哈希我认为这可能与你的current_cart方法有关但我不确定

line_items_controller.rb

 def create @bike = Bike.find(params[:bike_id]) @line_item = current_cart.line_items.build @line_item.bike = @bike logger.debug("@@@@ Line item attributes = #{@line_item.inspect}") respond_to do |format| if @line_item.save format.html { redirect_to(@line_item.cart, :notice => 'Line item was successfully created.') } format.xml { render :xml => @line_item, :status => :created, :location => @line_item } else format.html { render :action => "new" } format.xml { render :xml => @line_item.errors, :status => :unprocessable_entity } end end end 

更新。

您之前的代码很好,除了这行@line_item = @ cart.line_items.build(:bike_id => @bike)您提供的是整个class级作为自行车ID的值而不是自行车的ID。 我知道这与传递表单参数不一致,但这就是它的方式。