我有一个项目并向项目添加服务我将项目ID传递给服务:
new_service_path(project: "#{@id}")
然后我的服务控制器找到项目:
def new
@service = Service.new
@project = Project.find(params[:project])
@service.documents.build
end
我可以在视图中显示项目,但我想将项目ID保存到服务记录以创建关联。我正在使用Simple Form:
simple_form_for @service do |f|
此代码的工作形式为:
<% if @project %>
<%= f.association :project, selected: @project.id %>
<% else %>
<%= f.association :project %>
<% end %>
但是,如果我有一个项目,我想跳过使用f.association和选择框创建的选择过程,只需将project_id添加到我的服务对象。
我该怎么做?
答案 0 :(得分:2)
为什么不在控制器中将项目设置为服务?
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
字段。
隐藏的输入可能是另一种方法,但我不认为这是最好的。