尝试使用simple_form在我的主页上构建搜索(与formtastic非常相似)。搜索工作正常,我得到了我的结果,但提交后我想保留用户提交的内容。
我正在为表单使用命名空间,因此如何保留表单的数据。以下是一些可能有用的代码。
控制器
def index
@results = Property.search(params[:search])
end
查看
%h1 Search Form
= simple_form_for(:search) do |f|
= f.input :location, :as => :select, :collection => Location.all.asc(:name)
= f.input :type, :collection => PropertyType.all.asc(:name)
= f.input :bedrooms, :collection => 1..10,
%p.box
= f.button :submit
-if @results
%h1 Search Results
.results
- @results.each do |property|
.result
%h1= property.title
在Index控制器中,我尝试了各种各样的东西,即
@search = params[:search]
但是每当我尝试搜索时,搜索都会中断。
我做错了什么?
希望你能提出建议
答案 0 :(得分:2)
一种方法是按照Xavier Holt建议的方式进行,并将值传递给每个输入。 simpleform doco建议:
= f.input :remember_me, :input_html => { :value => '1' }
另一种方法是让simpleform为你做。如果你给它一个类似于activerecord对象的东西,SimpleForm会自动用字段填充字段。
在这种情况下,这意味着要创建一个模型对象:
class PropertySearchCriteria
attr_accessor :location, :type, :bedrooms
def initialize(options)
self.location = options[:location]
self.type = options[:bedrooms]
self.bedrooms = options[:bedrooms]
end
end
然后,更改您的控制器:
def index
@property_search_criteria = PropertySearchCriteria.new(params[:search])
@results = Property.search(@property_search_criteria)
end
(您还必须更改Property.search方法)
然后,更改simple_form_for:
= simple_form_for(:search, @property_search_criteria) do |f|
如果你做了所有这些,并让星星恰到好处地对齐,那么simpleform将预先填充表单字段。您可能需要向PropertySearchCriteria添加一些内容才能使simpleform感到满意。
这只是为了让价值显示出来,但是如果您需要添加验证,它会让您保持理智。
答案 1 :(得分:0)
您可以尝试在会话中存储您的参数,如下所示:
def index
@results = Property.search(params[:search])
store_search
end
def store_search
session[:search] = params[:search]
end
确定完成了清理它们的参数后
...
clear_search if session[:search]
def clear_search
session[:search] = nil
end
答案 2 :(得分:0)
我在我正在处理的应用程序中做了类似的事情(我没有使用formtastic,但这应该至少非常接近适合你的东西)。我通过确保@search
是控制器中的哈希来解决它:
@search = params[:search] || {}
然后在我的所有搜索输入中使用@search[:key]
作为:value
选项(您可能需要设置@search.default = ''
才能使其正常工作):
<%= text_field_tag :name, :value => @search[:name] %>
这就是全部。随着我的应用程序变得越来越复杂和AJAXy,我一直在考虑将搜索参数移动到会话信息中,您现在可能希望这样做以保持领先,但如果您只是在寻找一个简单的解决方案,那么对我很好。
希望这有帮助!