0

我正在尝试按照本教程实现 HABTM 复选框: http ://www.justinball.com/2008/07/03/checkbox-list-in-ruby-on-rails-using-habtm/

虽然一切似乎都运行良好,但更新并未保存到我的数据库中。我的控制器如下所示:

class UserrolesController < ApplicationController

 before_action :set_userrole

 def edit
   @projects=Project.all
 end

 def update
    params[:userrole][:project_ids] ||= []
    @userrole = Userrole.find(params[:id])
    if @userrole.update_attributes(userrole_params)
        flash[:notice] = "Settings have been saved."
        redirect_to edit_userrole_url(@userrole)
    else
        flash.now[:error] = @userrole.errors
        setup_form_values
        respond_to do |format|
            format.html { render :action => :edit}
        end
    end
 end

 private

 def set_userrole
   @userrole = Userrole.find(params[:id])
 end

 def userrole_params
   params.require(:userrole).permit(:name, :project_ids)
 end

end

我的 _form.html.erb 是这样的:

<%= form_for(@userrole) do |f| %>
<% if @userrole.errors.any? %>
<div id="error_explanation">
  <h2><%= pluralize(@userrole.errors.count, "error") %> prohibited this person from being saved:</h2>

  <ul>
  <% @userrole.errors.full_messages.each do |msg| %>
    <li><%= msg %></li>
  <% end %>
  </ul>
</div>
<% end %>

<div class="center">
  <div class="field">
    <%= f.label :Name %>
<%= f.text_field :name %>
 </div>

<ul class="checkbox-list">
  <% @projects.each do |project| -%>
<li><%= check_box_tag "userrole[project_ids][]", project.id, userrole_edits_project?(project) -%> <%= project.name -%></li>
  <% end -%>
</ul>

 <div class="actions">
   <%= f.submit "Speichern", class: "btn btn-primary" %>
 </div>
</div>
<% end %>

所以我做了教程中的所有事情,:name 保存没有任何问题,但 id 没有保存到数据库中。没有错误信息。有人知道可能出什么问题吗?也许某处缺少一些许可?

4

1 回答 1

0

所以最后我找到了解决这个问题的方法。我通过在 def update 中添加以下行来强制更新 project_ids:

    @userrole.project_ids=params[:userrole][:project_ids]
于 2013-10-24T09:13:03.763 回答