将父值传递给简单形式
Passing parent value to simple form
我有一个项目,要向项目添加服务,我将项目 ID 传递给服务:
new_service_path(project: "#{@id}")
然后我的服务控制器找到项目:
def new
@service = Service.new
@project = Project.find(params[:project])
@service.documents.build
end
我可以在视图中显示项目,但我想将项目 ID 保存到服务记录以创建关联。我正在使用简单表格:
simple_form_for @service do |f|
此代码以以下形式工作:
<% if @project %>
<%= f.association :project, selected: @project.id %>
<% else %>
<%= f.association :project %>
<% end %>
但是,如果我有一个项目,我想跳过使用 f.association 和 select 框创建的 selection 过程,只需将 project_id 添加到我的服务对象。
我该怎么做?
为什么不在controller中把Project设置成Service呢?
def new
@service = Service.new
@project = Project.find(params[:project])
if @project
@service.project = @project
end
@service.documents.build
end
那么项目的表格就是:
<%= f.association :project %>
无论如何,您可以在提交表单时将项目 ID 传递到下一个路由,例如 simple_form_for @service, :url => create_project_path(project: @project.id) do |f|
然后接受该参数并在 create
方法中设置该关联:
def new
@service = Service.new
@project = Project.find(params[:project])
@service.documents.build
end
def create
@service = Service.new
@project = Project.find(params[:project])
if @project
@service.project = @project
end
# ... other logic
end
然后像您在问题中所做的那样隐藏 project
字段。
隐藏输入可能是另一种方法,但我认为这不是最好的方法。
我有一个项目,要向项目添加服务,我将项目 ID 传递给服务:
new_service_path(project: "#{@id}")
然后我的服务控制器找到项目:
def new
@service = Service.new
@project = Project.find(params[:project])
@service.documents.build
end
我可以在视图中显示项目,但我想将项目 ID 保存到服务记录以创建关联。我正在使用简单表格:
simple_form_for @service do |f|
此代码以以下形式工作:
<% if @project %>
<%= f.association :project, selected: @project.id %>
<% else %>
<%= f.association :project %>
<% end %>
但是,如果我有一个项目,我想跳过使用 f.association 和 select 框创建的 selection 过程,只需将 project_id 添加到我的服务对象。
我该怎么做?
为什么不在controller中把Project设置成Service呢?
def new
@service = Service.new
@project = Project.find(params[:project])
if @project
@service.project = @project
end
@service.documents.build
end
那么项目的表格就是:
<%= f.association :project %>
无论如何,您可以在提交表单时将项目 ID 传递到下一个路由,例如 simple_form_for @service, :url => create_project_path(project: @project.id) do |f|
然后接受该参数并在 create
方法中设置该关联:
def new
@service = Service.new
@project = Project.find(params[:project])
@service.documents.build
end
def create
@service = Service.new
@project = Project.find(params[:project])
if @project
@service.project = @project
end
# ... other logic
end
然后像您在问题中所做的那样隐藏 project
字段。
隐藏输入可能是另一种方法,但我认为这不是最好的方法。