在我的Rails 3应用程序中,我使用两个复选框,在一种情况下,使用选择帮助程序来提交搜索表单。我在表单中应用了一些jQuery,所以如果单击一个复选框,表单就会提交。与选择助手相同。如果单击该复选框,则在页面呈现后,复选框保持选中状态,作为用于获取搜索结果的参数的指示符。问题是,在提交搜索表单后,select帮助器默认为“Select”。它不保持用于执行搜索的参数的值。
例如,假设我有三个选项:“选择”,“艺术”和“职业”。如果选择是我的表单中的默认值,并且我想按艺术搜索,则单击“艺术”会提交表单,刷新页面,并且会显示与“艺术”匹配的记录。然而,选择助手不显示“艺术”。提交表单时,它默认返回“选择”。
我正在使用Ransack进行搜索,所以以下是我执行搜索的Controller中的操作:
def index
@q = User.search(params[:q])
@users = @q.result(:distinct => true)
end
def search
index
render :index
end
这是我的选择助手:
<%= f.select :profile_subject_eq, options_for_select([['Select', ''], ['Arts'], ..., ['Vocational']], :selected => @q) %>
(如您所见,我尝试将:selected
更改为无效。)
最后,这是我用来提交表单的jQuery:
$(function(){
$('select').live('change',function() {
$(this).closest('form#index').submit();
});
});
UPDATE:以下是选择帮助程序的HTML输出:
<fieldset>
<select id="q_profile_subject_eq" name="q[profile_subject_eq]">
<option value="nil">Select</option>
<option value="Arts">Arts</option>
...
<option value="Vocational">Vocational</option>
</select>
</fieldset>
答案 0 :(得分:0)
尝试
options_for_select([['Select', 'nil'], ['Arts'], ..., ['Vocational']], @q)
根据API doc,第二个参数是选定的项目本身,而不是像:selected => ...
答案 1 :(得分:0)
如果你的设置只使用选择,那么你可以这样做。
<%= f.select :profile_subject_eq, [["Arts"], ["Vocational"]], {:include_blank => 'Select', selected: params[:q] ? params[:q].try(:[], :profile_subject_eq) : ""} %>