【发布时间】:2017-10-25 21:51:57
【问题描述】:
我在搜索表单中有一系列选择框,在提交表单并加载结果时,我需要保留这些选择框。我正在使用模板化表单选择,它在表单提交后(通过 POST)正确选择了 4 个输入中的 3 个。用于选择电子邮件的输入无法正常工作 - 奇怪的是,它仅适用于某些选项。
由于选择框是模板化的,我认为它一定与内容相关。或者我只是忽略了一些非常简单的事情......
随机或非随机事实:目前有四个电子邮件地址填充选择选项。两个在选择和提交时不会重新加载,它们“恰好”是我不只是编造的电子邮件,我已经在 Firefox 56 中为它们存储了登录信息。但是,我在 Chrome 上尝试过,同样的两封电子邮件没有也不要在那里预先选择。其中只有一个是 Chrome 中保存的登录信息。
我被难住了。
我在 Rails 5.1.4 上,使用 Ransack 1.8.3 和 Simpleform 3.5.0。选择框使用 Selectize 0.12.4 美化。
控制器
class Admin::StoriesController < ApplicationController
layout "admin"
before_action :set_search_variables
def index
@stories = @q.result.page params[:page]
end
def search
index
render :index
end
...
private
def story_params
allowed = [
:name,
:story,
:email,
:organization,
:image,
:published,
:user_profession,
:reviewed,
:image_delete
]
params.require(:story).permit(allowed)
end
def set_search_variables
@q = Story.order(created_at: :desc).ransack(params[:q])
@options = Story.select([:name, :organization, :email, :user_profession])
end
...
结束
搜索表单
<%= search_form_for [:admin, @q], url: search_admin_stories_path, html: { method: :post }, class: "pt-4 mod-search-form" do |f| %>
...
<%= render partial: 'admin/_forms/select', locals: { label: "Name", search_param: :name_eq, attribute: :name, f: f } %>
<%= render partial: 'admin/_forms/select', locals: { label: "Email", search_param: :email_eq, attribute: :email, f: f } %>
<%= render partial: 'admin/_forms/select', locals: { label: "Organization", search_param: :organization_eq, attribute: :organization, f: f } %>
<%= render partial: 'admin/_forms/select', locals: { label: "Profession", search_param: :user_profession_eq, attribute: :user_profession, f: f } %>
...
<%= f.submit "Search", class: "btn btn-outline-primary btn-block my-4 w-75 mx-auto" %>
<%= f.button "Reset", type: :button, id: :search_reset, class: "btn btn-sm btn-outline-secondary w-50 mx-auto mb-4 d-block" %>
选择部分
<div class="form-group">
<%= f.label search_param, label %>
<%= f.select search_param,
options_from_collection_for_select(@options.order(attribute),
attribute,
attribute,
request.method.eql?("POST") ? params[:q][search_param] : ""),
{include_blank: "Any"},
"data-placeholder": "Any",
class: "form-control"
%>
</div>
和 Selectize js
$('select').selectize({
selectOnTab: true,
allowEmptyOption: true
});
【问题讨论】:
-
您的模型上是否将
:search_param设置为attr_accessor? -
我不明白为什么这是必要的,或者为什么当所有其他人都没有被标记为 w/attr_accessor 时它会为所有其他人工作;然而,我还是尝试了——没有运气。
标签: ruby-on-rails forms simple-form ransack