选择帮助程序不显示搜索表单中所选选项的值

时间:2011-12-08 07:44:24

标签: ruby-on-rails-3 postback

在我的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>

2 个答案:

答案 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) : ""} %>