如何解决 ParameterMissing 错误?

How to solve ParameterMissing error?

当我尝试在 _follow.html.rb 表单中提交但无法弄清楚为什么没有传递参数时,出现以下错误。

我得到了:

ActionController::ParameterMissing in UsersController#update

缺少参数或值为空:用户

   def user_params
      params.require(:user).permit(:name, :email, :password,
                                   :password_confirmation, :followed_user)
   end

这是请求

Parameters:

{"utf8"=>"✓",
 "_method"=>"patch",
 "authenticity_token"=>"LOnA6CA3yQYaCDqme6OkxPZlkBRvybhYANreU3BxuV8=",
 "followed_user"=>"#<User:0x007f4e902fcf20>",
 "commit"=>"Follow",
 "id"=>"57f2b32b717f01297dda1759"}

下面是视图

<%= form_for(current_user) do |f| %>
  <div><%= hidden_field_tag :followed_user, @user %></div>
  <%= f.submit "Follow", class: "btn btn-primary" %>
<% end %>

这是我的用户模型

class User
  include Mongoid::Document
  include ActiveModel::SecurePassword
  has_many :microposts, dependent: :destroy
  has_and_belongs_to_many :followers, :class_name => 'User', :inverse_of => :following
  has_and_belongs_to_many :following, :class_name => 'User', :inverse_of => :followers


  field :name, type: String
  field :email, type: String
  field :password_digest, :type => String
  field :admin, type: Boolean, default: false
  field :created_at, type: Date, default: Time.current

  has_secure_password 


  def feed
    microposts
  end

# Follows a user.
  def follow(other_user)
    following << other_user
  end

  # Unfollows a user.
  def unfollow(other_user)
    following.delete(other_user)
  end

  # Returns true if the current user is following the other user.
  def is_following?(other_user)
    following.include?(other_user)
  end

end

我认为您需要在表单中使用“@user”而不是 "current user"。

所以在表格中改变

<%= form_for(current_user) do |f| %>

<%= form_for(@user) do |f| %>

您应该使用块中的 'f' 变量生成 hidden_field_tag 以确保它提交 user 参数。

<%= f.hidden_field :followed_user_id %>

但是,您可能还有其他问题需要处理。您需要在用户实例上使用一个方法来处理获取和设置 followed_user_id。考虑到有很多追随者,不确定是否有意义。

此外,这将向 update 方法发送请求,这可能不是您想要的。相反,您可能希望它将请求发送到 followings 控制器 create 方法 - 这将是 RESTful。不过,这是一个单独的问题。这应该可以帮助您入门。