我創建了一個「select_tag」字段,當用戶單擊保存該字段的所有值以通過參數傳遞給控制器時,我需要它。問題是當我點擊保存時,只有在此字段中輸入的第一個值被傳遞給控制器。在參數中傳遞select_tag的值
爲了更好地理解,「select_tag」字段通過另一個字段「f.text_field:members」字段填充。當我點擊一個「添加」按鈕時,「f.text_field:members」字段的值被傳遞給「select_tag」字段,因此我希望能夠從「select_tag」字段中檢查所有這些值以驗證和保存,我該怎麼做?正如我已經說過的,只有輸入的第一個值被傳遞。
現在看看參數,我意識到返回爲「參數」的值只是在下拉列表中選擇的值,其他值不予考慮。如何傳遞下拉菜單中的所有值?
代碼:
<%= form_for(@focus_group) do |f| %>
<% if @focus_group.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@focus_group.errors.count, "error") %> prohibited this focus_group from being saved:</h2>
<ul>
<% @focus_group.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<script type="text/javascript">
$(function() {
$('#focus_group_moderator, #focus_group_members').autocomplete({
source: '/focus_groups/autocomplete.json'
});
});
function add(){
var value = $('#focus_group_members').val();
var select = document.getElementById("membersAdded");
var option = document.createElement("option");
option.text = value;
option.value = value;
select.add(option);
$('#focus_group_members').val("");
}
function removeFromSelect(){
var select = document.getElementById("membersAdded");
select.remove(select.selectedIndex);
}
</script>
<div class="field">
<%= f.label :name %><br>
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :topic %><br>
<%= f.text_field :topic %>
</div>
<div class="field">
<%= f.label :moderator %><br>
<%= f.text_field :moderator %>
</div>
<div class="field">
<%= f.label :description %><br>
<%= f.text_area :description %>
</div>
<div class="field">
<%= f.label :members %><br>
<%= f.text_field :members %>
<input onclick="add()" type="button" value="Add" /><br>
<%= select_tag(:membersAdded, options_for_select([])) %>
<input onclick="removeFromSelect()" type="button" value="Remove" /><br>
<br>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
控制器
class FocusGroupsController < ApplicationController
before_action :set_focus_group, only: [:show, :edit, :update, :destroy]
include FocusGroupsHelper
def index
if(params[:term])
@profile = Profile.all.select("name", "id")
@lista = Array.new
@profile.each do |x|
@lista.push(x.name)
end
respond_to do |format|
format.html
format.json { render json: @lista.to_json}
end
else
@focus_groups = FocusGroup.all
end
end
def show
end
def new
@focus_group = FocusGroup.new
@membersAdded
respond_to do |format|
format.html
format.json { render json: Profile.all.to_json}
end
end
def edit
end
def create
@moderator= find_profiles_id(focus_group_params[:moderator])
@moderator.each do |f|
@moderator_id = f.id
end
@params = focus_group_params
@params[:moderator] = @moderator_id
@focus_group = FocusGroup.new(@params)
if @focus_group.save
redirect_to @focus_group, notice: 'Focus group was successfully created.'
else
render :new
end
end
def update
if @focus_group.update(focus_group_params)
redirect_to @focus_group, notice: 'Focus group was successfully updated.'
else
render :edit
end
end
def destroy
@focus_group.destroy
redirect_to focus_groups_url, notice: 'Focus group was successfully destroyed.'
end
def autocomplete
if(params[:term])
@profile = Profile.all.where("user_id <> 0 and is_template = 'f' and name LIKE ?", "#{params[:term]}%").select("name", "id")
@lista = Array.new
@profile.each do |x|
@lista.push(x.name)
end
respond_to do |format|
format.html
format.json { render json: @lista.to_json}
end
end
end
def find_profiles_id(name)
return Profile.all.where("name LIKE ?", "#{name}%").select("id")
end
def find_profiles_name(id)
@profile = Profile.all.where("id = ?", "#{id}").select("name")
@profile.each do |e|
@name = e.name
end
return @name
end
private
def set_focus_group
@focus_group = FocusGroup.find(params[:id])
end
def focus_group_params
params.require(:focus_group).permit(:name, :topic, :moderator, :description, :members, :membersAdded)
end
end
發佈您的控制器代碼,包括您的params方法。是允許參數列表中的select-tag字段? – toddmetheny
編輯@toddmetheny – Luis
現在看看這些參數,我意識到作爲「params」返回的值只是在下拉列表中選擇的值,其他值不會被考慮。如何傳遞下拉菜單中的所有值? – Luis