RequestsController中的ArgumentError#创建错误的参数个数(给定1,预期2..3)

时间:2018-04-17 05:20:42

标签: ruby-on-rails

这里有铁杆初学者,所以请坚持下去。

在我的简单应用程序中,我正在尝试使用文本字段创建表单。用户输入一些文本后,该文本将用于进一步处理。

我创建了一个用于存储该文本的请求模型,并且在用户单击提交按钮后,我使用标准方法在我的create方法中获取参数

我的档案是:

  

应用程序/控制器/ requests_controller.rb

class RequestsController < ApplicationController
  include HTTParty

  def create
    @request = Request.new(request_params)
    if @request.save
    HTTParty.options(http_proxyaddr="my_proxy")
    @res = HTTParty.get("http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&artist=#{@request.text}&api_key=my_api_key&format=json")
    render 'show'
    else
      # nothing yet
    end
  end

  private
    def request_params
      params.require(:request).permit(:text)
    end
end
  

应用程序/模型/ request.rb

class Request < ApplicationRecord
  validates :text, presence: true,
                    length: { maximum: 100 }
end
  

/db/migrate/create_requests.rb

class CreateRequests < ActiveRecord::Migration[5.1]
  def change
    create_table :requests do |t|
      t.text :text

      t.timestamps
    end
  end
end
  

应用程序/视图/会话/ home.html.erb

<h1> welcome! <h1>
<% if logged_in? %>
    <%= form_for(:request, url: request_path) do |f| %>
      <%= f.label :text %>
      <%= f.text_field :text, class: 'form-control' %>
      <%= f.submit "search", class: "btn btn-primary" %>
    <% end %>
    <%= link_to "Log out", logout_path, method: :delete %>
<% else %>
    <ul>
    <li><%= link_to "log in", login_path %></li>
    <li><%= link_to "sign up", signup_path %> </li>
    </ul>
<% end %>
  

配置/ routes.rb中

Rails.application.routes.draw do
  get 'sessions/new'

  root 'sessions#home'
  get  '/signup',  to: 'users#new'
  post '/signup',  to: 'users#create'
  get   '/login',   to: 'sessions#new'
  post   '/login',   to: 'sessions#create'
  delete '/logout',  to: 'sessions#destroy'
  post '/request', to: 'requests#create'
  resources :users
  resources :requests

end

我得到的错误是:

screenshot

  

{“utf8”=&gt;“✓”,“authenticity_token”=&gt;“h3yj54YtfZjBMdP50qsh7w0MEty / DOzBEqoYPyacT3dyoqHNQyPGDTdUGCOPoJ6szBQFVT7cAlpR19 + PO0ebgg ==”,“request”=&gt; {“text”=&gt;“FGFGFG”},“提交“=&gt;”搜索“}

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

你正在使用httparty gem,你在控制器中有这一行:

include HTTParty

现在,如果你深入研究宝石代码(见下面的链接):

Request Class

gem已经有Request类,并且您已在应用程序中创建了相同的名称模型。因此,最好将模型重命名为其他内容以避免混淆。

或者您可以在创建操作中尝试此操作:

@request = ::Request.new(request_params)

::可能会解决您的问题。但最好总是为类使用不同的名称,以便将来在应用程序增长时不会遇到任何问题。