私が抱えている問題は、検証エラーが発生した場合、ビューの選択ボックスが選択された値を維持しないことです。
私は多対多の関係を持つビジネスとカテゴリーの関係を持っています
category.rb
class Category < ActiveRecord::Base
has_and_belongs_to_many :businesses
business.rb
class Business < ActiveRecord::Base
has_and_belongs_to_many :categories
私の見解では、選択フィールドがあります
<%= f.select(:category_tokens, Category.all.collect {|c| [ c.name, c.id ] }, { :include_blank => "Select Category", :selected => params['category'] }}) %>
business.categories
リターンと配列を使用して、コンソールでビジネスカテゴリにアクセスできます。
私の見解では、追加したパラメータのトラブルシューティングを行います。
<%= @business.categories %>
<%= @business.attributes.inspect %>
<%= @business.user.attributes.inspect %>
これらのショーの出力は次のようになります
[#<Category id: 2, name: "kitchen renovations", created_at: "2012-10-19 14:16:52", updated_at: "2012-10-19 14:16:52">]
{"id"=>nil, "business_name"=>"", ... additional attributes}
{"id"=>nil, "email"=>"", ... additional attributes}
paramsハッシュは次のようになります
Processing by BusinessesController#create as HTML
Parameters: {"utf8"=>"✓",
"authenticity_token"=>"fVz1mJZI8QT/HYKRph8YTvzRec0IVV0RS55v5QD5SL0=",
"business"=>{"category_tokens"=>"2",
"location"=>"", "service_area"=>"20",
"business_name"=>"", "abn_number"=>"",
"business_description"=>"",
"address"=>"", "suburb"=>"",
"notification_type"=>"",
"user_attributes"=>{"first_name"=>"", "phone"=>"", "email"=>"", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}}, "commit"=>"Sign up my Business"}
したがって、カテゴリは設定されていますが、検証エラーが発生したときにカテゴリを選択値として使用するために、これをビューの選択に追加する方法がわかりません。
編集-コントローラーコードの追加----
class BusinessesController < ApplicationController
def new
@business = Business.new
@business.build_user
end
def create
@business = Business.new(params[:business])
respond_to do |format|
if @business.save
cookies[:auth_token] = @business.user.auth_token
format.html { redirect_to jobs_users_path, notice: 'Your business was successfully created.' }
else
format.html { render action: "new" }
end
end
終わり