Ruby on rails 禁用属性错误参数ruby搜索表单

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] %>

我有一个isuue。我正在我的表单中创建搜索表单。表单包含餐厅名称、城市和州

看起来像这样:

<%= 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个字段(餐厅名称、城市、州)中的任何一个,结果都会弹出。我该怎么做?