我找不到解决方案而且我变得有点绝望......
形式:
<%= simple_form_for @skill_user, :url => create_new_skill_users_path do |f| %>
<% @skills.each do |skill| %>
<%= skill.name %>
现在......其他字段......
中的新内容<%= f.input :prio, collection: 1..5, :as => :radio_buttons %>
<%= f.text_field :remark%>
<%= check_box_tag "skill_ids[]", "#{skill.id}" %>
<%= hidden_field_tag("skill_id", "#{skill.id}") %>
<%= hidden_field_tag(:user_id, "#{@user.id}") %>
<% end %>
控制器:
def create_new_skill
params[:skill_ids].each do|skill_id|
SkillUser.create(
:user_id => user_id, :instruction_id => params[:instruction_id], :remark => ??, :prio => ??
)
end
感谢您的支持。 现在我有一个不同的问题/两个问题。如果......你可以再次帮助我会很好。
每行中表单中的单选按钮集合。但不可用,因为它们作为一个而不是每一行。我需要一些额外的参数来指向每行的技巧。
还有如何获取控制器中的值。
备注文字字段。我在日志中得到“skill_user”=&gt; {“remark”=&gt;“”}。获取覆盖..需要某个地方[]。什么是最好的方式?
我试过了:
&lt;%= simple_fields_for“skill []”,@ skill_user do | f | %GT; 给我日志: “技能”=&GT; [{ “备注”=&gt; “中测试”}
控制器 :remark =&gt; params [:skill] [:remark] =&gt;无法将符号转换为整数 PHH ...
“text_field_tag []”返回一个哈希..
答案 0 :(得分:0)
你应该写
params[:skill_ids].each do|skill_id|
SkillUser.create(:user_id => params[:user_id], :skill_id => skill_id)
end
在控制器的行动中。
根据REST约定
,您的帖子操作也应该在创建时不是新的答案 1 :(得分:0)
由于您可能处于学习阶段,我会向您推荐一些提示并给您答案。
使用好名字命名您的操作和控制器。在这种情况下,我猜一个带有动作new的SkillController是一个不错的选择。在路线中,使用资源而不是匹配或获取/发布/放置/删除最长时间。
def new_sk
params[:skill_ids].each do|skill_id|
SkillUser.create(
:user_id => params[:user_id],
:skill_id => skill_id,
:name => params[:name]
)
end
end
答案是答案。这段代码很简单,你传递给SkillUser.create的是HASH,散列键是user_id,skill_id和name,它们各自的值是params [:user_id],params [:skill_id]和params [:name ]
当你不知道&#34; params&#34;的当前状态时变量是(它的哈希值是如何嵌套的等等),我建议你打印它,如下所示:
p params.inspect
在操作开始时,然后阅读正在运行服务器的终端上打印的内容。有一个名为awesome_print
的宝石用颜色打印它,当你只是试图看到服务器端真正发生的事情时,它很棒(顾名思义)。
我还建议你创建一个名字好的模型。 &#34; SkillUser&#34;是错的,如果你写了UserSkill会更好。您很可能很快就会处理关系,我还建议您阅读Rails指南。
Rails guides是黄金。你可以找到90%的问题,并有很好的解释。
祝你有个美好的一天。