Sam*_*dhe 4 associations belongs-to ruby-on-rails-3
我正在研究Belongs_to协会,我使用了以下模型,因为每个订单都属于客户,所以我使用了belongs_to的顺序模型,它在创建订单时给出了错误
未命名的方法`orders'for#
当我在客户模型中使用has_many:orders时,它工作正常,为什么它只与belongs_to一起使用
它使用has_many:客户模型中的订单而不是has_one:客户控制器中的订单它给出了相同的上述错误.
提前致谢.
型号: - order.rb
class Order < ActiveRecord::Base
  belongs_to :customer
  attr_accessible :order_date, :customer_id
end
型号: - customer.rb
class Customer < ActiveRecord::Base
  attr_accessible :name
end
控制器: - orders.rb
  def create
     @customer = Customer.find_by_name(params[:name])
    @order = @customer.orders.new(:order_date => params[:orderdate] )
    respond_to do |format|
      if @order.save
        format.html { redirect_to @order, notice: 'Order was successfully created.' }
        format.json { render json: @order, status: :created, location: @order }
      else
        format.html { render action: "new" }
        format.json { render json: @order.errors, status: :unprocessable_entity }
      end
    end
  end
MrT*_*rus 11
从技术上讲,belongs_to 将无需匹配has_many或工作has_one.例如,如果您说Order belongs_to :customer,则可以调用.customerOrder对象,并获取Customer对象.您不能做的是.orders在没有告诉客户has_many :orders(或者.order在案件中has_one)的情况下致电客户,因为该方法是由has_many声明创建的.
也就是说,我想不出任何理由你只想指定一半的关系.这是一个糟糕的设计选择,你不应该这样做.
编辑:has_one不创建.collection方法has_many.根据指南:
4.2.1 has_one添加的方法
声明has_one关联时,声明类会自动获得与关联相关的四种方法:
Run Code Online (Sandbox Code Playgroud)association(force_reload = false) association=(associate) build_association(attributes = {}) create_association(attributes = {})
你会注意到.new那个列表上没有.如果要添加关联对象,可以使用customer.build_order(),或customer.order = Order.new().
| 归档时间: | 
 | 
| 查看次数: | 3223 次 | 
| 最近记录: |