Controller Create Method属于很多

时间:2013-10-15 02:37:04

标签: ruby-on-rails controller belongs-to

所以这是一个学校项目。我们不必使用Ruby,但我决定沿途学习一门新语言。所以我的问题是:

我有一个资产,应该有制造商,位置和员工表的外键。它还有许多维护记录。

class Asset < ActiveRecord::Base
  belongs_to :manufacturer
  belongs_to :location
  belongs_to :employee
  has_many :maintenances
end

我很难理解如何构建资产的创建方法?我有选择框用于选择三个值,但我不知道如何在保存时正确地将它们与资产相关联。

以下是选择框:

    <p>
        <%= f.label :Manufacturer %>
        <%= select_tag(:Manufacturer, options_from_collection_for_select(Manufacturer.all, :id, :name))%>
    </p>
    <p>
        <%= f.label :Location %>
        <%= select_tag(:Location, options_from_collection_for_select(Location.all, :id, :name))%>
    </p>
    <p>
        <%= f.label :Employee %>
        <%= select_tag(:Employee, options_from_collection_for_select(Employee.all, :id, :email))%>
    </p>

我已经努力创造了一段时间了。感谢。

2 个答案:

答案 0 :(得分:1)

我认为你需要使用foreign_id,而不是关联名称,每个rails docs:“如果你使用select(或类似的帮助器,如collection_select,select_tag)来设置belongs_to关联,你必须传递名称外键(在上面的例子中为city_id)“

此外,此select_tag与其父表单无关。选择标签名称属性是错误的。尝试:f.select_tag(:employee_id, .....)

最后,你应该尝试使用formtastic。我需要在rails中渲染html表单时使用它 - 这是一个很好的节省时间。

答案 1 :(得分:0)

您可以像这样编写控制器动作(如果您同时遵循Mario的建议):

def create
  @asset = Asset.create(:employee_id => params[:employee_id], :manufacturer_id ...)
end