当我尝试访问由关系has_many - belogs_to创建的方法时,我得到一个未定义的方法错误。这是代码(简化):
local.rb(model):
class Local < ActiveRecord::Base
has_many :foods, dependent: :destroy, :foreign_key => 'local_id'
end
food.rb:
class Food < ActiveRecord::Base
attr_accessible :descrizione, :nome, :prezzo, :voto
belongs_to :local, :foreign_key => 'local_id'
end
调用foodsController上的create action的/locals/show.html.erb视图:
...
<%= form_for :food, :url => {:controller => :foods, :action => :create} do |f| %>
...
<% end %>
foods_controller.rb
class FoodsController < ApplicationController
def create
@food = @local.foods.build(params[:food])
end
end
这里有一个问题,就是在food_controller上创建动作:“未定义的方法'食物''。为什么?关系应该启用local.foods方法? (@local在locals_controller.rb中定义,@ local = Local.find(params [:id]),local_id属性在schema.rb和最后一次db迁移中定义,只是为了清楚)
谢谢
答案 0 :(得分:1)
结帐accepts_nested_attributes_for
here。我认为这是做你正在尝试做的事情的标准方法。
答案 1 :(得分:0)
由于@local
是在不同的控制器中定义的,因此您将无法从FoodController访问它。