创建一个对象并从不同的模型为它分配一个关联的对象
Creating an object and assigning it an associated object to it from a different model
我的数据库中有工具和项目。项目属于工具,一个工具有一个项目。我的数据库中已有许多工具。
创建项目时,我也希望能够为其分配一个工具。棘手的是,数据库中的 tool_id 引用了一个工具,而用户只知道该工具的名称。
因此,当我创建一个项目时,我希望能够传入一个 tool_name,然后以某种方式找出它是哪个工具,并使用分配给它的适当工具来创建项目。
到目前为止,这是我的代码,如您所见,它不起作用。当我在我的新项目表单中使用 tool_name 但我的强参数期望 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
我的项目table如下:
create_table "projects", force: :cascade do |t|
t.string "name"
t.integer "tool_id"
end
我的工具table:
create_table "tools", force: :cascade do |t|
t.string "tool_name"
end
在我的项目模型中,我有:belongs_to :tool
在我的工具模型中,我有:has_one :project
我会提供一个下拉菜单,而不是提供可用的工具。类似于:
<%= f.collection_select(:tool_id, Tool.all, :id, :name) %>
如果工具列表很大,使用自动完成可能会更好,但这取决于您的应用程序。
我的数据库中有工具和项目。项目属于工具,一个工具有一个项目。我的数据库中已有许多工具。
创建项目时,我也希望能够为其分配一个工具。棘手的是,数据库中的 tool_id 引用了一个工具,而用户只知道该工具的名称。
因此,当我创建一个项目时,我希望能够传入一个 tool_name,然后以某种方式找出它是哪个工具,并使用分配给它的适当工具来创建项目。
到目前为止,这是我的代码,如您所见,它不起作用。当我在我的新项目表单中使用 tool_name 但我的强参数期望 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
我的项目table如下:
create_table "projects", force: :cascade do |t|
t.string "name"
t.integer "tool_id"
end
我的工具table:
create_table "tools", force: :cascade do |t|
t.string "tool_name"
end
在我的项目模型中,我有:belongs_to :tool
在我的工具模型中,我有:has_one :project
我会提供一个下拉菜单,而不是提供可用的工具。类似于:
<%= f.collection_select(:tool_id, Tool.all, :id, :name) %>
如果工具列表很大,使用自动完成可能会更好,但这取决于您的应用程序。