【问题标题】:Undefined method on create with has_many and belongs_to relationship使用 has_many 和 belongs_to 关系创建的未定义方法
【发布时间】:2012-07-07 16:21:16
【问题描述】:

当我尝试访问由 has_many - belogs_to 关系创建的方法时,我得到一个未定义的方法错误。这是代码(简化):

local.rb(模型):

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 操作的 /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

在foods_controller on create action 中提出了问题:“undefined method 'foods' '。为什么?关系应该启用 local.foods 方法? (@local 在 locals_controller.rb 中定义,@local = Local.find(params[:id]) 和 local_id 属性在 schema.rb 和最后一个 db migration 中定义,只是为了清楚)

谢谢

【问题讨论】:

  • 你能提供更多细节吗?是不是说@local 为零?
  • @local 不为零,告诉我你还需要什么其他详细信息
  • 既然@local是在不同的控制器中定义的,是不是不能从FoodController访问?
  • 您如何从 food 控制器访问在 locals 控制器中定义的 @local?
  • 完整的错误信息是什么。请张贴。

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


【解决方案1】:

查看accepts_nested_attributes_for here。我认为这是做你想做的事情的标准方法。

【讨论】:

  • 几个小时后我会试试
  • 但是模型之间的关系本身会创建方法,不是吗?
  • 我已经尝试在 local.rb 中放置 accept_nested_attributes_for :foods 并在 @food = local.foods.build(params[food]) 中更改 food_controller 的创建操作,但 'local' 不是定义
【解决方案2】:

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

【讨论】:

  • 我可以在 locals_helper 中编写一个名为 current_local 的方法来检索当前本地吗?
  • 我认为您不需要辅助方法。您只想将食物对象保存到数据库中吗?如果是这样,您应该可以这样做: Food.new(params[:food]).save
  • 是的,我想这样做,但是每个食物都有当地人,你能帮帮我吗?
  • 这样做的目的是什么?为什么不只在需要数据时查询数据库并将其传递给视图?
  • 它的目的是由于这个特定的程序,因为我正在关注一个教程,我想了解它是如何工作的。包含新食物形式的视图是显示特定本地的视图,因此创建时我需要新食物包含特定的 local_id,因此“自动”创建新食物和本地之间的关系(已经可视化)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-06
  • 1970-01-01
  • 2014-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多