在数据库中进行简单搜索



我的应用程序中的简单浏览器有问题。 我已经在寻找解决方案,但仍然显示以下错误: 参数缺失或值为空:费用。

请帮忙。 指数:

<%= form_tag expenses_path :method => 'get' do %>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search" , name: nil %>

控制器:

类费用控制器

# GET /expense  expense
# GET /expense.json
def index
  @expenses = Expense.search(params[:search])
end
# GET /expense/1
# GET /expense/1.json
def show
end
# GET /expense/new
def new
  @expense = Expense.new
end
# GET /expense/1/edit
def edit
end
# POST /expense
# POST /expense.json
def create
  @expense = Expense.new(expense_params)
  respond_to do |format|
    if @expense.save
      format.html { redirect_to @expense, notice: 'zostały zapisane.' }
      format.json { render :show, status: :created, location: @expense }
    else
      format.html { render :new }
      format.json { render json: @expense.errors, status: :unprocessable_entity }
    end
  end
end
# PATCH/PUT /expense/1
# PATCH/PUT /expense/1.json
def update
  respond_to do |format|
    if @expense.update(expense_params)
      format.html { redirect_to @expense, notice: 'expense was successfully updated.' }
      format.json { render :show, status: :ok, location: @expense }
    else
      format.html { render :edit }
      format.json { render json: @expense.errors, status: :unprocessable_entity }
    end
  end
end
# DELETE /expense/1
# DELETE /expense/1.json
def destroy
  @expense.destroy
  respond_to do |format|
    format.html { redirect_to @expense, notice: 'Zakupy zostały usunięte.' }
    format.json { head :no_content }
  end
end
private
  # Use callbacks to share common setup or constraints between actions.
  def set_expense
    @expense = Expense.find(params[:id])
  end
  # Never trust parameters from the scary internet, only allow the white list through.
 def expense_params
    params.require(:expense).permit(:date, :price, :category, :where)
 end

Expense.rb:

class Expense < ApplicationRecord
def self.search(search)
    if search
        where (['where LIKE ?',"%#{search}%"])
    else
        all
    end
end

允许在参数中进行搜索

 def expense_params
   params.require(:expense).permit(:date, :price, :category, :where, :search)
 end

请更正form_tag语法

<%= form_tag(expenses_path,method: :get) do %>
 <%= text_field_tag :search, params[:search] %>
 <%= submit_tag "Search" , name: nil %>
<% end %>

您报告的错误消息很可能来自您的expense_params方法:

params.require(:expense)意味着您希望参数的形式为 params[:expense][:date]params[:expense][:price] 等。

我最好的猜测是,您的表单实际上并没有提交GET请求,因此它将转到create方法而不是索引方法。

我认为这可能是因为您在form_tag中缺少expenses_path:method => 'get'之间的逗号。它应该是:

<%= form_tag expenses_path, :method => 'get' do %>

最新更新