我的数据库中有工具和项目。项目属于工具&一个工具有一个项目。我的数据库中已经有很多工具了。
创建项目时,我希望能够为其分配工具。棘手的是,工具由数据库中的tool_id引用,而用户只知道工具的名称。
因此,当我创建一个项目时,我希望能够传入一个tool_name,然后以某种方式找出哪个工具并使用分配给它的正确工具创建项目。
到目前为止,这是我的代码,因为你可以看到它不起作用。当我在我的新项目表单中使用tool_name但我强大的params期望tool_id而不是tool_name
你会如何解决这个问题?
我有一张表格
<%= form_for [@project], :html => { :multipart => true } do |f| %>
<div class="form-group">
<%= f.label :name %><br>
<%= f.text_field :name, class:'form-control' %>
</div>
<div class="form-group">
<%= f.label :tool_name %><br>
<%= f.text_field :tool_name, class:'form-control' %>
</div>
在我的项目控制器中,我有以下创建方法和强参数
def create
@project = Project.new(project_params)
end
private
def project_params
params.require(:project).permit(:name, :tool_id)
end
我的项目表如下:
create_table "projects", force: :cascade do |t|
t.string "name"
t.integer "tool_id"
end
我的工具表:
create_table "tools", force: :cascade do |t|
t.string "tool_name"
end
在我的项目模型中,我有:belongs_to :tool
在我的工具模型中,我有:has_one :project
答案 0 :(得分:0)
我会提供一个下拉菜单,而不是可用的工具。类似的东西:
<%= f.collection_select(:tool_id, Tool.all, :id, :name) %>
如果工具列表很大,您可能最好使用自动填充功能,但这取决于您的应用程序。