0

既に利用可能なすべての「専門分野」のリストをユーザーに提供する形式のドロップダウン ボックスを作成することを目指しています。

私はガイドライン モデルを持っており、このモデルには属性 :specialty がありますが、views/guidelines/_form.html.erb のフォームにこれを追加する方法がわかりません (simple_form を使用しています)。

ガイドライン_コントローラー.rb

デフリスト専門

@speclist = Guideline.order(:specialty).uniq.pluck(:specialty)

定義トピック専門

 @guidelines = Guideline.find_all_by_specialty(params[:specialty])

見解・ガイドライン

new.html.erb

<%= render 'form', speclist: @speclist %>

*_form.html.erb*

<%= f.input :specialty, as: :select, collection: speclist %>

listspecialty.html.erb

    <% @speclist.each do |specialty| %>
<%= link_to specialty, :action => :topicspecialty, :specialty => specialty %>

ルート

get "guidelines/listspecialty"
  get "guidelines/topicspecialty"
  match "specialty", to: "guidelines#listspecialty", as: :specialty
  get '/:id', to: 'guidelines#topic'
  get '/:id', to: 'guidelines#topicspecialty'
4

1 に答える 1

1

simple_formこれを試してください:

<%= f.input :specialty, as: :select, collection: @list %>

また、配列コードを次のように単純化することもできます。

@list = @guidelines.map(&:specialty).uniq

または、そのためだけにガイドラインを取得している場合は、次の@listようにします。

@list = Guideline.order(:specialty).uniq.pluck(:specialty)

フォームに渡す@listには、パーシャルに渡す必要がある場合があります。

# guidelines controller
def list_specialty
  #some code
  @list = Guideline.order(:specialty).uniq.pluck(:specialty)
end

# routes, something like:
match "specialty", to: "guidelines#list_specialty", as: :specialty

# where you add your partial
<%= render 'form', list: @list %>

# then in your form
<%= f.input :specialty, as: :select, collection: list %>

アップデート

new.html.erbアクションに相関するguidelines#newため、ビューで使用するコードもアクションに含める必要があります。次に例を示します。

# guidelines controller
def new
  @specialties = Guideline.order(:specialty).uniq.pluck(:specialty)
  @guideline = Guideline.new
end

# in guidelines/new.html.erb
<%= simple_form_for @guideline do |f| %>
  <%= f.input :some_attr %>
  <%= f.input :specialty, as: :select, collection: @specialties %>
  ....
<% end %>
于 2013-02-18T09:07:30.347 に答える