我收到以下错误,当我尝试使用_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
答案 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。不过,这是一个单独的问题。这应该可以帮到你。