如何解决ParameterMissing错误?

时间:2016-10-13 14:50:33

标签: ruby-on-rails ruby railstutorial.org

我收到以下错误,当我尝试使用_follow.html.rb表单提交时,无法弄清楚为什么没有传递参数。

我得到了:

ActionController :: UsersMtroller中的ParameterMissing #update

param丢失或值为空:user

   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

2 个答案:

答案 0 :(得分:0)

我认为你需要你的表格才能拥有&#34; @ user&#34;在for代替&#34;当前用户&#34;。

所以在表单更改

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

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

答案 1 :(得分:0)

你应该使用&#39; f&#39;来自块的变量生成hidden_field_tag以确保它提交user参数。

<%= f.hidden_field :followed_user_id %>

但是,您可能还有其他需要处理的问题。您需要在用户实例上使用一种方法来处理获取和设置的follow_user_id。考虑到有很多以下内容,不确定是否有意义。

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