这里有铁杆初学者,所以请坚持下去。
在我的简单应用程序中,我正在尝试使用文本字段创建表单。用户输入一些文本后,该文本将用于进一步处理。
我创建了一个用于存储该文本的请求模型,并且在用户单击提交按钮后,我使用标准方法在我的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
我得到的错误是:
{“utf8”=&gt;“✓”,“authenticity_token”=&gt;“h3yj54YtfZjBMdP50qsh7w0MEty / DOzBEqoYPyacT3dyoqHNQyPGDTdUGCOPoJ6szBQFVT7cAlpR19 + PO0ebgg ==”,“request”=&gt; {“text”=&gt;“FGFGFG”},“提交“=&gt;”搜索“}
非常感谢您的帮助。
答案 0 :(得分:0)
你正在使用httparty
gem,你在控制器中有这一行:
include HTTParty
现在,如果你深入研究宝石代码(见下面的链接):
gem已经有Request
类,并且您已在应用程序中创建了相同的名称模型。因此,最好将模型重命名为其他内容以避免混淆。
或者您可以在创建操作中尝试此操作:
@request = ::Request.new(request_params)
::
可能会解决您的问题。但最好总是为类使用不同的名称,以便将来在应用程序增长时不会遇到任何问题。