2

私が抱えている問題は、検証エラーが発生した場合、ビューの選択ボックスが選択された値を維持しないことです。

私は多対多の関係を持つビジネスとカテゴリーの関係を持っています

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

終わり

4

2 に答える 2

2

いくつかの簡単な変更を加えることで、この問題を修正しました。

私のコントローラーに以下を追加しました

def create
  #...
  category = (params[:business][:category_tokens])
  @category = category
  #...
end

次に、これを私のビューで選択したオプションに使用しました。

<%= f.select(:category_tokens, Category.all.collect {|c| [ c.name, c.id ] }, { :include_blank => "Select Category", :selected => @category }}) %>
于 2012-12-05T04:15:42.677 に答える
-1

2019年の時点で更新中、f.selectが次のようになっている場合:

<%= f.select(:sector , options_for_select([["Please select", "Please select"], ["Energy", "Energy"], ["Metals","Metals"], ["Agriculture","Agriculture"], ["Renewables","Renewables"], ["Natural Ressources","Natural Ressources"], ["Other","Other"]])) %>

options_for_select(...)を削除するだけで、検証エラーが発生した場合に選択した内容がページに「記憶」されます。

<%= f.select(:sector , [["Please select", "Please select"], ["Energy", "Energy"], ["Metals","Metals"], ["Agriculture","Agriculture"], ["Renewables","Renewables"], ["Natural Ressources","Natural Ressources"], ["Other","Other"]]) %>

これが複数選択入力でどのように機能するかわかりません。また、読みやすくするために独自の例を使用しました。

于 2019-01-31T13:36:42.437 に答える