在Rails 5中,我有以下模型:
Talents.rb
id | Title
1 | Jumping
2 | Skipping
3 | Running
我的API,返回Talents#Index就像这样:
[
{"id":1,"title":"Jumping"},
{"id":2,"title":"Skipping Rope"},
{"id":3,"title":"Running"},
{"id":4,"title":"Something Else"}
]
然后我想使用响应来构建表单:
<div>
<label>Jumping</label>
<select name="Jumping">
<option></option>
<option value="1">XXX</option>
<option value="2">YYY</option>
</select>
</div>
....
我的问题是我应该如何考虑在表单中命名才能,以便我可以将表单正确发布到Rails,然后记录用户的响应?
我是否需要使用某种类型的Key的API中的其他字段?或者对于选择名称,我应该使用ID吗?
答案 0 :(得分:2)
我会做这样的事情:
<form name="my-form" method="post" action="/create">
<div>
<label>Jumping</label>
<input type="hidden" name="ratings[]talent_id" value="1"></input>
<select name="ratings[]rating">
<option></option>
<option value="1">Rating 1</option>
<option value="2">Rating 2</option>
</select>
</div>
<div>
<label>Skipping</label>
<input type="hidden" name="ratings[]talent_id" value="2"></input>
<select name="ratings[]rating">
<option></option>
<option value="1">Rating 1</option>
<option value="2">Rating 2</option>
</select>
</div>
<div>
<label>Running</label>
<input type="hidden" name="ratings[]talent_id" value="3"></input>
<select name="ratings[]rating">
<option></option>
<option value="1">Rating 1</option>
<option value="2">Rating 2</option>
</select>
</div>
<input type="submit" name="submit" value="Send">
</form>
ratings[]
会创建一个数组,这样您就可以为每个select
使用相同的名称。input
类型hidden
,可以指定评分的人才(每个input
的值是talent_id
的评分{ {1}})。例如,如果用户选择以下内容:
select
Rating 2
{li> Jumper
Rating 1
{li> Jumping
Rating 1
然后将以下参数发送给您的控制器:
Skipping
现在,在您的控制器中,您可以迭代Parameters: {
"ratings"=>[
{"talent_id"=>"1", "rating"=>"2"},
{"talent_id"=>"2", "rating"=>"1"},
{"talent_id"=>"3", "rating"=>"1"}
]
}
来创建每个对象,可能是这样的:
params[:ratings]
当然,您应该优化此方法,例如,处理错误而不是引发异常(如params[:ratings].each do |rating|
rating_attributes = {
user_id: user, # use the appropriate `user_id`
rated_by: rater, # use the appropriate `rated_by`
talent_id: rating[:talent_id],
rating: rating[:rating]
}
Rating.create!(rating_attributes)
end
所做的那样);但这会让你前进。