Ruby on rails 禁用属性错误参数ruby搜索表单
我有一个isuue。我正在我的表单中创建搜索表单。表单包含餐厅名称、城市和州 看起来像这样:Ruby on rails 禁用属性错误参数ruby搜索表单,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我有一个isuue。我正在我的表单中创建搜索表单。表单包含餐厅名称、城市和州 看起来像这样: <%= form_tag(restaurants_path, :method => "get", id: "search-form") do %> <%= label_tag(:restaurant_name) %> <%= text_field_tag :restaurant_name, params[:restaurant_name] %>
<%= form_tag(restaurants_path, :method => "get", id: "search-form") do %>
<%= label_tag(:restaurant_name) %>
<%= text_field_tag :restaurant_name, params[:restaurant_name] %> <br />
<%= label_tag(:city, "Restaurant City") %>
<%= text_field_tag :city, params[:city] %> <br />
<%= label_tag(:state, "Restaurant State") %>
<%= text_field_tag :state, params[:state] %> <br />
<%= submit_tag "Search", :name => nil %>
<% end %>
@restaurants = Restaurant.where(params[:restaurant_name]).order('restaurant_name desc').paginate(:per_page => 5, :page => params[:page])
“get”,id:“搜索表单”)do%>
零%>
现在,我正在尝试获取部分餐厅名称/位置的信息
我已经看到,如果我的表单编码正确,您可以执行以下操作:
Restaurant Controller:
class RestaurantsController < ApplicationController
before_action :set_restaurant, only: [:show, :edit, :update, :destroy, :search]
# GET /restaurants
# GET /restaurants.json
def index
constraints = Hash.new
constraints[:restaurant_name] = params[:restaurant_name]
constraints[:city] = params[:city]
if params[:restaurant_name] && params[:city]
#@restaurants = Restaurant.search(params[:restaurant_name]).order('restaurant_name desc').paginate(:per_page => 5, :page => params[:page])
@restaurants = Restaurant.where(params).order('restaurant_name desc').paginate(:per_page => 5, :page => params[:page])
else
@restaurants = Restaurant.order('restaurant_name desc').paginate(:per_page => 5, :page => params[:page])
end
end
# GET /restaurants/1
# GET /restaurants/1.json
def show
end
# GET /restaurants/new
def new
@restaurant = Restaurant.new
end
# GET /restaurants/1/edit
def edit
end
# POST /restaurants
# POST /restaurants.json
def create
@restaurant = Restaurant.new(restaurant_params)
respond_to do |format|
if @restaurant.save!
session[:page] = 0
format.html { redirect_to restaurants_url, notice: 'Restaurant was successfully created.' }
format.json { head :no_content }
else
format.html { render :new }
format.json { render json: @restaurant.errors, status: :unprocessable_entity }
end
end
end
# GET /restaurants/1/search
# GET /restaurants/1.json
def gotosearch
end
def self.search
Restaurant.where("restaurant_name like ? AND city like ? ", params[:restaurant_name], params[:city])
end
# PATCH/PUT /restaurants/1
# PATCH/PUT /restaurants/1.json
def update
respond_to do |format|
if @restaurant.update(restaurant_params)
format.html { redirect_to @restaurant, notice: 'Restaurant was successfully updated.' }
format.json { render :show, status: :ok, location: @restaurant }
else
format.html { render :edit }
format.json { render json: @restaurant.errors, status: :unprocessable_entity }
end
end
end
# DELETE /restaurants/1
# DELETE /restaurants/1.json
def destroy
@restaurant.destroy
respond_to do |format|
format.html { redirect_to restaurants_url, notice: 'Restaurant was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_restaurant
@restaurant = Restaurant.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def restaurant_params
params.require(:restaurant).permit(:restaurant_name, :street, :city, :state, :zip, :split_the_check, :dont_split_the_check)
end
end
餐厅控制员:
类RestaurantController<应用程序控制器
在\u操作之前:设置\u餐厅,仅:[:显示,:编辑,:更新,:销毁,:搜索]
#去餐馆
#GET/restaurants.json
def索引
约束=Hash.new
约束[:餐厅名称]=参数[:餐厅名称]
约束条件[:城市]=参数[:城市]
如果参数[:餐厅名称]&参数[:城市]
#@餐厅=餐厅。搜索(参数[:餐厅名称])。订单('Restaurant\u name desc')。分页(:per\u page=>5,:page=>params[:page])
@餐厅=餐厅.where(params).order('Restaurant_name desc').paginate(:per_page=>5,:page=>params[:page])
其他的
@餐厅=餐厅。订单('Restaurant_name desc')。分页(:per_page=>5,:page=>params[:page])
结束
结束
#获取/餐厅/1
#GET/restaurants/1.json
def秀
结束
#获取/餐厅/新
def新
@餐厅
结束
#获取/餐厅/1/编辑
定义编辑
结束
#邮政/食肆
#POST/restaurants.json
def创建
@餐厅=餐厅。新建(餐厅)
回应待办事项|格式|
如果@restaurant.save!
会话[:页]=0
format.html{redirect_to restaurants_url,注意:“餐厅已成功创建”。}
format.json{head:no_content}
其他的
format.html{render:new}
format.json{render json:@restaurant.errors,status::unprocessable_entity}
结束
结束
结束
#获取/餐厅/1/搜索
#GET/restaurants/1.json
def gotosearch
结束
def self.search
餐厅。在哪里(“餐厅名称像?城市像?”,参数[:餐厅名称],参数[:城市])
结束
#补丁/放置/餐厅/1
#PATCH/PUT/restaurants/1.json
def更新
回应待办事项|格式|
如果@restaurant.update(餐厅参数)
format.html{将_重定向到@restaurant,注意:“restaurant已成功更新”。}
format.json{render:show,status::ok,location:@restaurant}
其他的
format.html{render:edit}
format.json{render json:@restaurant.errors,status::unprocessable_entity}
结束
结束
结束
#删除/餐厅/1
#删除/restaurants/1.json
def销毁
@餐厅,毁灭
回应待办事项|格式|
format.html{redirect_to restaurants_url,注意:'餐厅已成功销毁。}
format.json{head:no_content}
结束
结束
私有的
#使用回调在操作之间共享公共设置或约束。
迪夫塞图餐厅
@restaurant=restaurant.find(参数[:id])
结束
#永远不要相信来自恐怖网络的参数,只允许白名单通过。
迪夫餐厅酒店
参数要求(:餐厅)。许可(:餐厅名称,:街道,:城市,:州,:邮编,:拆分支票,:不拆分支票)
结束
结束
问题出在这一行:
@restaurants = Restaurant.where(params).order('restaurant_name desc').paginate(:per_page => 5, :page => params[:page])
您正在使用名为params的变量进行搜索,该变量保存请求的所有参数。您需要做一些更具体的事情,例如:
<%= form_tag(restaurants_path, :method => "get", id: "search-form") do %>
<%= label_tag(:restaurant_name) %>
<%= text_field_tag :restaurant_name, params[:restaurant_name] %> <br />
<%= label_tag(:city, "Restaurant City") %>
<%= text_field_tag :city, params[:city] %> <br />
<%= label_tag(:state, "Restaurant State") %>
<%= text_field_tag :state, params[:state] %> <br />
<%= submit_tag "Search", :name => nil %>
<% end %>
@restaurants = Restaurant.where(params[:restaurant_name]).order('restaurant_name desc').paginate(:per_page => 5, :page => params[:page])
或者您可以通过约束[:restaurant_name]进行搜索,因为您已经声明了该变量
如果您基于多个属性进行搜索,则可以执行以下操作:
@restaurants = Restautanr.where("restaurant_name = ? OR name = ? OR state = ?", params[:restaurant_name], params[:city], params[:state])
你的应用程序是什么版本的Rails,你能发布你的应用程序吗。我现在就发。我第一次发的时候没有任何限制。现在你能发一些与餐馆有关的路线吗?我唯一能做的就是:好的,这是有道理的。但问题是。我有3个参数。因此,如果我输入3个字段(餐厅名称、城市、州)中的任何一个,结果都会弹出。我该怎么做?