我有两个模型:Schedules
和Result
。
has_one
结果belongs_to
时间表 Schedules
数据,当匹配发生时,我们会为每个results
创建schedule
。
如上图所示,Create
链接会将您带到一个页面,您可以在该页面中为计划创建结果。我将发送schedule_id
点击Create
按钮的时间表。
<%= link_to "Create",new_result_url(:schedule_id => schedule.id),{:class => 'btn btn-link btn'}%>
在结果#New
中 def new
@schedule = Schedule.find(params[:schedule_id])
@result = @schedule.build_result
end
在视图 results / new.html.erb
中这是我被困或不知道如何提交结果表格的地方
对于我选择的schedule_id
<div class="row">
<div class="col-md-4">
<%= form_for(@result) do |f| %>
<h3>Enter the result</h3>
<%= f.text_area :result,class:'form-control' %><br />
<%= f.submit "Submit", class: "btn btn-primary" %>
<% end %>
</div>
</div>
答案 0 :(得分:3)
您可能希望在result
下嵌套schedules
。在你的路线:
resources :schedules do
resource :result
end
然后你的控制器看起来像这样:
class ResultsController < ApplicationController
def create
schedule.create_result(result_params)
end
private
def schedule
Schedule.find(params[:schedule_id])
end
def result_params
params.require(:result).permit(:result)
end
end
这会构建您的应用程序以反映您的实际信息架构,并且您不必担心通过隐藏字段传递ID。
答案 1 :(得分:1)
在表单中,添加:
<%= f.hidden_field :schedule_id, value: @schedule.id %>
这将通过您的参数传递父id
的{{1}}。另外,请确保在控制器中schedule
permit
参数。
另外,为了更轻松地将schedule_id
传递到schedule_id
页面,我将results#new
文件更改为:
routes
这样,resources :schedules do
resources :results
end
页面的路线现在为results#new
,您可以在new_schedule_result_path(@schedule)
中使用该路线。
编辑:
另外,将link_to
更改为:
form_for
您需要在控制器中定义<%= form_for[@schedule, @result] do |f| %>
。