Я разрабатываю приложение 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 процентов»]. Как я могу достичь этого более удобного для пользователя результата? Спасибо!
Я изменил свой код представления по вашему предложению, и я получаю удобный вид, который я желаю. Спасибо за помощь мне. – codeinspired