我想将表单的值传递给Controller,Controller应该从Model中调用方法来搜索产品。
我想传递NSData
和用户在category_id
处写的字符串
我会将模型的空白值传递给模型(如果用户没有在搜索栏上写东西或选择任何类别)
我想保存模型中的空白值原因,SQL空白变量采取" all"的东西。
这是一个很好的原因,如果params中有东西,SQL会找到那个东西,但是如果params中没有任何内容,那么SQL将会占用所有产品。
我无法在varibiles中保存params的值,因为如果params为空它会返回给我这个错误:
未定义的方法`[]'为零:NilClass
我希望你了解我以及我想做什么。 换句话说,我想使用一个简单的赋值将值(甚至是空值)传递给模型来进行SQL查询。在一次代码拍摄中,我想编写两种情况。
这是我的代码。
在我的控制器中:
...
textfield
...
在我的模型中:
if params[:search]
@search_name = params[:search]
end
if params[:category][:name]
@category = params[:category][:name]
end
@products = Product.search(@search_name,@category)
答案 0 :(得分:1)
您可以通过定义类似
的方法来获取类别参数def category_params
params.fetch(:category, {})
end
然后,查找“产品”,
@search_name = params[:search]
@category = category_params[:name]
@products = Product.search(@search_name, @category)
在我看来,如果你直接查询产品,那么你应该这样做,
def product_params
params.fetch(:product, {})
end
@category = product_params[:category_id]
@title = product_params[:title]
@products = Product.search(@category, @title)
在产品型号中,
def self.search(category, title)
where("category_id = ? AND title LIKE ?", category, "%#{title}%")
end
答案 1 :(得分:0)
试试这个:
@search_name = params[:search]
@category = (params[:category].blank? ? nil : params[:category][:name])
@products = Product.search(@search_name,@category)
答案 2 :(得分:0)
@Vito,更改行 - > @category =你的控制器中的params [:category] [:name] by
问题是当你没有选择类别时,params [:category]变为nil并且你从params [:category]获取名称,这就是为什么错误“未定义的方法`[]'为nil:NilClass”即将来临
希望这能解决您的问题。
答案 3 :(得分:0)
我还有问题,因为我写的时候
if params[:category]
@category = params[:category][:name]
else
@category = " "
end
if params[:search]
@nome_ricerca = params[:search]
else
@nome_ricerca = " "
end
@products = Product.search(@nome_ricerca,@category)
我有这个问题:
显示C:/Bitnami/depot/app/views/store/index.html.erb,其中第18行引发: undefined方法`name'代表“”:String
提取的来源(第18行):
<p>
<%= label_tag :search, 'Search:' %>
<%= text_field_tag :search, params[:search] %>
<%= collection_select :category, :name, Category.all, :id, :name, {:prompt => 'All Categories'} %>
<%= submit_tag "Search", name: nil %>
</p>
这是什么?
答案 4 :(得分:0)
好的,我解决了这个问题 (我认为)是因为我使用@category作为变量名 也许这个观点让人感到困惑 我在@cat中调用@category,问题就消失了
但是,现在的问题是如果我通过&#34;&#34;那么SQL查询不会返回所有类别。在变量@cat中 我如何获得查询的所有结果?和%%一样,但它有效 category_id =&#34;&#34;没有。为什么呢?
我发布了为其他人修复的代码:
在控制器中:
if params[:category]
@cat = params[:category][:name]
else
@cat = ''
end
if params[:search]
@nome_ricerca = params[:search]
else
@nome_ricerca = ''
end
@products = Product.search(@nome_ricerca,@cat)
模特:
def self.search(nome_ricerca,categoria)
ricerca = Product.where("title like ? AND category_id = ? ", "%#{nome_ricerca}%",categoria)
end
答案 5 :(得分:0)
最后一次发布:
问题修复:
在控制器
中 @stringa_sql = ""
if params[:search]
@nome_ricerca = params[:search]
else
@nome_ricerca = ''
end
@stringa_sql = "title like "+"'%"+@nome_ricerca+"%'"
if params[:category]
if params[:category][:name] != ""
@cat = params[:category][:name]
@stringa_sql += " AND category_id = "+@cat
else
@cat = ''
end
end
@products = Product.search(@stringa_sql)
在模特:
def self.search(stringa_sql)
ricerca = Product.where(stringa_sql)
end
问题:此解决方案是否遭受Sql注入?
所有:) 我希望这个解决方案可以帮助别人。