我是Rails的新手,我有这些复选框,可以很好地显示选项,但在提交表单时不会更改数据库中的任何内容。 视图中的表单包含以下代码:
<%= form_for(@sector) do |f| %>
<%= f.collection_check_boxes :admins_id, Admin.all, :id, :name %>
<% end %>
这是扇区控制器中的相应操作:
def update
@sector = Sector.find(params[:id])
@sector.admins_id = params[:admins_id]
respond_to do |format|
if @sector.update(sector_params)
format.html { redirect_to @sector, notice: 'Sector was successfully updated.' }
format.json { render :show, status: :ok, location: @sector }
else
format.html { render :edit }
format.json { render json: @sector.errors, status: :unprocessable_entity }
end
end
end
private
def sector_params
params.require(:sector).permit(:title, :admins_id)
end
最后,我在模型中有这些关系:
class Sector < ActiveRecord::Base
has_many :admins, dependent: :destroy
validates :title, presence: true
validates :title, uniqueness: true
end
class Admin < ActiveRecord::Base
belongs_to :sector
end
另外,我可以在rails控制台中创建和分配管理员。
答案 0 :(得分:1)
如果您要设置一个 admins_id ,那么您不需要复选框(将通过一系列ID)使用collection_radio_buttons(对于单个ID)。
但是,如果要通过has_many关联设置多个管理员,请保留复选框,但将属性名称更改为 admin_ids 。 (不要忘记更改permit()白名单中的名称。)
此外,您可以删除此行:
@sector.admins_id = params[:admins_id]
没有必要,因为它是通过update()设置的。