0

我找不到解决方案,我变得有点绝望......

形式:

<%= 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.id。

以及如何获取控制器中的值。

备注文本字段。我在日志中得到 "skill_user"=>{"remark"=>""} 。被覆盖......需要某处[]。什么是最好的方法?

我努力了:

<%= simple_fields_for "skill[]", @skill_user do |f| %> 给我日志:"skill"=>[{"remark"=>"test"}

控制器 :remark => params[:skill][:remark] => 无法将 Symbol 转换为 Integer phh...

“text_field_tag[]”返回一个哈希..

4

2 回答 2

0

你应该写

 params[:skill_ids].each do|skill_id| 
  SkillUser.create(:user_id => params[:user_id], :skill_id => skill_id)
 end

在您的控制器的操作中。

根据 REST 约定,您的帖子操作也应该是创建而不是新的

于 2012-09-21T15:41:58.997 回答
0

由于您可能处于学习阶段,因此我会向您推荐一些提示并给您答案。

用好名字命名你的动作和控制器。在这种情况下,我想具有新动作的 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 ]。

当您不知道“params”变量的当前状态(它的哈希值如何嵌套等等)时,我建议您打印它,如下所示:

p params.inspect

在您开始操作时,请阅读您正在运行服务器的终端上打印的内容。当您只是想查看服务器端真正发生的事情时,有一个名为的宝石awesome_print可以用颜色打印它并且很棒(顾名思义)。

我还建议您创建一个具有好名称的模型。“SkillUser”是错误的,如果你写了UserSkill会更好。您可能很快就会与关系合作,我进一步建议您阅读有关这方面的 Rails 指南。

导轨是黄金的。您可以在那里找到 90% 的问题得到解答,并有很好的解释。

祝你有美好的一天。

于 2012-09-21T15:57:39.203 回答