0

我的目标是在表单中创建一个下拉框,为用户提供已经可用的所有“专业”列表。

我有一个指南模型,这个模型有一个属性:specialty,但我不知道如何在我的表单中添加这个视图/指南/_form.html.erb(我使用的是 simple_form)

指南控制器.rb

def listspecialty

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

def topicspecialty

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

意见/指南

新的.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.erbguidelines#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 回答