使用has_many和belongs_to关系创建的未定义方法

时间:2012-07-07 16:21:16

标签: ruby-on-rails ruby ruby-on-rails-3 relationship belongs-to

当我尝试访问由关系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迁移中定义,只是为了清楚)

谢谢

2 个答案:

答案 0 :(得分:1)

结帐accepts_nested_attributes_for here。我认为这是做你正在尝试做的事情的标准方法。

答案 1 :(得分:0)

由于@local是在不同的控制器中定义的,因此您将无法从FoodController访问它。