用于NilClass的未定义方法“model_name”:类跟随用户

时间:2013-11-04 00:27:46

标签: ruby-on-rails ruby-on-rails-3 twitter

我正在努力解决这个持续存在的问题(请参阅我的上一期提问)

我正在修改一个推特克隆是一个多功能的页面。

我希望current_user能够通过手动提交来跟踪:username

所以在/views/users/buddies.html.erb下:

<%= form_for :relationship do |f| %>
  <%= f.text_field :username, placheholder: "username" %>
  </div>
  <br/>
  <%= f.submit "Add/Subtract" %>
<% end %>

正试图发布到此控制器:

users_controller.rb

def buddies
  @relationship = User.find_by_username(params[:username])

  if @relationship
    if current_user.following? @relationship
      current_user.unfollow @relationship
    else
      current_user.follow @relationship
    end
  else
    flash[:notice] = "User with username #{params[:username]} is not found"
  end

我正在使用User.rb中定义的方法。

这应该有效,但事实并非如此。它一定是params或语法的问题。 :relationship@relationship吗?如果是这样,我收到此错误:

undefined method "model_name" for NilClass:Class

我正在使用Rails 3.2。现在为了简单起见,这是我的github

2 个答案:

答案 0 :(得分:0)

我认为您的params引用需要为params[:relationship][:username]

答案 1 :(得分:0)

正如彼得所提到的那样,你应该从:username哈希中抓取:relationship params[:relationship][:username],如下所示:

@relationship = User.find_by_username(params[:relationship][:username])

您可以在控制台中看到params哈希的确切内容,以确定如何获取:username

然后你可以像这样快速而肮脏地检查结果:

puts "No relationship found" if @relationship.nil? 

只是为了自己检查。

然后在您的表单中,您执行此操作:

<%= form_for @relationship do |f| %>