我的目標是向用戶呈現選擇表單,他們可以在其中選擇多個選項。編輯表單是一個SiteGroup,它是一組對象Site。Rails嵌套屬性具有多個選擇和強參數不更新
表單應顯示所有現有網站並突出顯示已選中的網站。
但是,更新工作,但網站不更新。
site_group.rb
class SiteGroup < ActiveRecord::Base
has_and_belongs_to_many :sites
accepts_nested_attributes_for :sites
end
site_groups_controller.rb
class SiteGroupsController < ApplicationController
before_action :set_site_group, only: [:show, :edit, :update, :destroy]
# GET /site_groups
# GET /site_groups.json
def index
@site_groups = SiteGroup.all
end
# GET /site_groups/1
# GET /site_groups/1.json
def show
end
# GET /site_groups/new
def new
@site_group = SiteGroup.new
end
# GET /site_groups/1/edit
def edit
end
# POST /site_groups
# POST /site_groups.json
def create
@site_group = SiteGroup.new(site_group_params)
respond_to do |format|
if @site_group.save
format.html { redirect_to @site_group, notice: 'Site group was successfully created.' }
format.json { render :show, status: :created, location: @site_group }
else
format.html { render :new }
format.json { render json: @site_group.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /site_groups/1
# PATCH/PUT /site_groups/1.json
def update
respond_to do |format|
if @site_group.update(site_group_params)
format.html { redirect_to @site_group, notice: 'Site group was successfully updated.' }
format.json { render :show, status: :ok, location: @site_group }
else
format.html { render :edit }
format.json { render json: @site_group.errors, status: :unprocessable_entity }
end
end
end
# DELETE /site_groups/1
# DELETE /site_groups/1.json
def destroy
@site_group.destroy
respond_to do |format|
format.html { redirect_to site_groups_url, notice: 'Site group was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_site_group
@site_group = SiteGroup.find(params[:id])
@sites = Site.all
end
# Never trust parameters from the scary internet, only allow the white list through.
def site_group_params
params.require(:site_group).permit(
:name,
:library,
sites: [:id]
)
end
end
_form.html.erb爲SiteGroup
<%= form_for(@site_group) do |f| %>
<% if @site_group.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@site_group.errors.count, "error") %> prohibited this site_group from being saved:</h2>
<ul>
<% @site_group.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :name %><br>
<%= f.text_field :name %>
</div>
# the @sites will also print the class, I would like to show the :name of the Site
<%= f.select :sites,
@sites,
{},
{multiple: true, size: 10}
%>
<div class="field">
<%= f.label :library %>
<%= f.text_field :library %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
如何才能使更新工作並顯示名稱,如果選擇字段中的網站?
通過更新作品我的意思是鋼軌給我沒有錯誤,並更新所有其他參數,但不是':site' – bnassler
所以,有兩個問題:1)顯示網站的名稱。 2)更新網站。它是否正確? –
@孫尼克:沒錯! – bnassler