2015-12-22 1 views
1

Я разрабатываю приложение Rails (4.1.8) с Postgres (0.18.3) и Simple Form (3.2.0). Как получить массив строк из раскрывающегося меню выбора нескольких коллекций? Следующие модели и отношения имеют отношение к этому вопросу:Как получить массив строк из поля выбора коллекции?

class FitnessGoal < ActiveRecord::Base 
has_and_belongs_to_many :targets 
end 

class Target < ActiveRecord::Base 
has_and_belongs_to_many :fitness_goals 
end 

Джойн таблицу в схеме:

create_table "fitness_goals_targets", id: false, force: true do |t| 
    t.integer "fitness_goal_id" 
    t.integer "target_id" 
end 

Фитнес цель Титулы:

def fitness_goal params 
    params.require(:fitness_goal).permit(:goal_list_id, :timeframe_id, { target_ids: [] }, :activity_id, :notes, :member_id, :trainer_id) 

Фитнес Цели контроллер создать действие:

def create 
    params[:fitness_goal][:target_ids] = params[:fitness_goal][:target_ids].reject{ |target_ids| target_ids.empty? } 
    @fitness_goal = @member.fitness_goals.build(fitness_goal_params) 

    if @fitness_goal.save 
    flash[:success] = "Fitness goal was successfully created." 
    redirect_to member_fitness_goals_path(@member) 
    else 
    render 'new' 
    end 
end 

Collection_select поле формы для новой цели фитнес:

<%= f.collection_select :target_ids, Target.order(:outcome), :id, :outcome, {:include_blank => "-- Select one to two --"}, {:multiple => true} %> 

Соответствующая форма исходного поля код:

<select id="fitness_goal_target_ids" multiple="multiple" name="fitness_goal[target_ids][]"><option value="">-- Select one to two --</option> 
<option value="1">Lose x pound</option> 
<option value="5">Reduce caloric intake by x percent</option> 

Соответствующий код вид индекс:

<% @fitness_goals.each do |fitness_goal| %> 
    <tr id="<%= dom_id(fitness_goal) %>"> 
    <td><%= fitness_goal.target_ids.sort.join(', ') %></td> 

Приведенный выше код дает мне массив вариант значения (например, [2, 5]. Однако вместо того, чтобы показывать числовые значения параметра в представлении, я хочу получить выбранный текст опции в виде массива строк. Другими словами, вместо представления [2, 5] в представлении я хочу, чтобы пользователи видели текстовый вывод, например [«Lose x фунтов», «Уменьшить потребление калорий на x процентов»]. Как я могу достичь этого более удобного для пользователя результата? Спасибо!

ответ

1

Изменить указательный код вида для:

<% @fitness_goals.each do |fitness_goal| %> 
    <tr id="<%= dom_id(fitness_goal) %> 
    <td><%= fitness_goal.targets.order(:id).collect(&:outcome).join(', ') %></td> 

Надежда, что это помогает!

+0

Я изменил свой код представления по вашему предложению, и я получаю удобный вид, который я желаю. Спасибо за помощь мне. – codeinspired