Rails // ActionController::ParameterMissing 错误

发布于 2025-01-19 08:10:42 字数 2806 浏览 2 评论 0原文

我收到 ActionController::ParameterMissing in FarmersController#create 错误。我只是做基本的用户登录设置。很多类似的帮助表明我可能有拼写,或者复数与单数的混淆。我似乎找不到任何这样的差异。

错误描述: 缺少参数或值为空:farmer

日志:

于 2022 年 4 月 4 日 17:02:59 -0400 开始处理 ::1 的 POST“/signup” 通过 FarmersController#create 作为 HTML 参数: {“authenticity_token”=>“[已过滤]”,“电子邮件”=>“[电子邮件受保护]", "用户名"=>"一个", "密码"=>"[已过滤]", "提交"=>"注册"} 购物车 加载(0.5ms) SELECT "carts".* FROM "carts" WHERE "carts"."id" = ? 限制 ? [["id", 9], ["LIMIT", 1]] ↳ 应用程序/控制器/application_controller.rb:11:在“current_cart”中 在 6 毫秒内完成 400 个错误请求(ActiveRecord:0.5 毫秒 | 分配: 1061

模型:

class Farmer < ApplicationRecord
  has_secure_password
end

架构:

create_table "farmers", force: :cascade do |t|
  t.string "username"
  t.string "email"
  t.string "password_digest"
  t.datetime "created_at", precision: 6, null: false
  t.datetime "updated_at", precision: 6, null: false
end

视图:

<h1>New Farmer</h1>
<hr>
<%= form_with model: @farmer do |f| %>
   <%= f.label :email %>
   <%= f.text_field :email %><br>
   <%= f.label :username %>
   <%= f.text_field :username %><br>
   <%= f.label :password %>
   <%= f.password_field :password %><br>
   <%= f.submit 'Sign Up' %>
<% end %>

控制器:

class FarmersController < ApplicationController

   def new
      @farmer = Farmer.new
   end

   def create
      farmer = Farmer.new(farmer_params)
      if farmer.save
         session[:farmer_id] = farmer.id
         redirect_to home_path   
      else
         render :new
      end
   end


   private

   def farmer_params
      params.require(:farmer).permit(:username, :email, :password)
   end

end

渲染的 HTML 表单:

<form action="/farmers" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="kI-3-ARDjvCc5Cm0qk1VgFJbDeXyzqTcDphG-bTQsWK5WIy8wRaWwhOM2uWEDZCr3AHcVgKMHusqRkhwA9nZew" autocomplete="off">
   <label for="farmer_email">Email</label>
   <input type="text" name="farmer[email]" id="farmer_email"><br>
   <label for="farmer_username">Username</label>
   <input type="text" name="farmer[username]" id="farmer_username"><br>
   <label for="farmer_password">Password</label>
   <input type="password" name="farmer[password]" id="farmer_password"><br>
   <input type="submit" name="commit" value="Sign Up" data-disable-with="Sign Up">
</form>

提前谢谢您。非常感谢。

I am getting an ActionController::ParameterMissing in FarmersController#create error. I am just doing a basic user login setup. A lot of the similar help out there suggests I may have a spelling, or a plural vs singular mix up. I can not seem to find any such discrepancy.

The error discription:
param is missing or the value is empty: farmer

Log:

Started POST "/signup" for ::1 at 2022-04-04 17:02:59 -0400 Processing
by FarmersController#create as HTML Parameters:
{"authenticity_token"=>"[FILTERED]", "email"=>"[email protected]",
"username"=>"one", "password"=>"[FILTERED]", "commit"=>"Sign Up"} Cart
Load (0.5ms) SELECT "carts".* FROM "carts" WHERE "carts"."id" = ?
LIMIT ? [["id", 9], ["LIMIT", 1]] ↳
app/controllers/application_controller.rb:11:in `current_cart'
Completed 400 Bad Request in 6ms (ActiveRecord: 0.5ms | Allocations:
1061

Model:

class Farmer < ApplicationRecord
  has_secure_password
end

Schema:

create_table "farmers", force: :cascade do |t|
  t.string "username"
  t.string "email"
  t.string "password_digest"
  t.datetime "created_at", precision: 6, null: false
  t.datetime "updated_at", precision: 6, null: false
end

View:

<h1>New Farmer</h1>
<hr>
<%= form_with model: @farmer do |f| %>
   <%= f.label :email %>
   <%= f.text_field :email %><br>
   <%= f.label :username %>
   <%= f.text_field :username %><br>
   <%= f.label :password %>
   <%= f.password_field :password %><br>
   <%= f.submit 'Sign Up' %>
<% end %>

Controller:

class FarmersController < ApplicationController

   def new
      @farmer = Farmer.new
   end

   def create
      farmer = Farmer.new(farmer_params)
      if farmer.save
         session[:farmer_id] = farmer.id
         redirect_to home_path   
      else
         render :new
      end
   end


   private

   def farmer_params
      params.require(:farmer).permit(:username, :email, :password)
   end

end

Rendered HTML form:

<form action="/farmers" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="kI-3-ARDjvCc5Cm0qk1VgFJbDeXyzqTcDphG-bTQsWK5WIy8wRaWwhOM2uWEDZCr3AHcVgKMHusqRkhwA9nZew" autocomplete="off">
   <label for="farmer_email">Email</label>
   <input type="text" name="farmer[email]" id="farmer_email"><br>
   <label for="farmer_username">Username</label>
   <input type="text" name="farmer[username]" id="farmer_username"><br>
   <label for="farmer_password">Password</label>
   <input type="password" name="farmer[password]" id="farmer_password"><br>
   <input type="submit" name="commit" value="Sign Up" data-disable-with="Sign Up">
</form>

Thank you in advance. Much appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

美羊羊 2025-01-26 08:10:42

由于您使用的是has_secure_password,请检查您是否安装了Bcrypt gem。在你的 Gemfile 中:

gem 'bcrypt', '~> 3.1.7'

Because you are using has_secure_password, please check if you have installed Bcrypt gem. In your Gemfile:

gem 'bcrypt', '~> 3.1.7'
感悟人生的甜 2025-01-26 08:10:42

我回去重置一切。一路上的某个地方,错误停止触发。据我所知,上面的代码对于我想做的事情或多或少是正确的。

I went back and reset everything. Somewhere along the way, the error stopped getting triggered. To the best of my knowledge, the code above is more or less correct for what I want to do.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文