人々が他の人をフォローできるレールアプリケーションを作成しています。データベースには偽装した約 100 人のユーザーがいます。次のコードを使用して、フェイカー ジェムを使用して、偽のユーザーと偽の関係をデータベースにアップロードしました。
def make_relationships
users = User.all
user = users.first
followed_users = users[2..50]
followers = users[3..40]
followed_users.each { |followed| user.follow!(followed) }
followers.each { |follower| follower.follow!(user) }
end
これにより、ユーザー 1 はユーザー 2 ~ 50 をフォローし、ユーザー 1 はユーザー 3 ~ 40 をフォローするようになります。しかし、私はこれが起こっているとは思わない。ユーザー 3 ~ 51 のプロフィール ページにアクセスすると、[フォローをやめる] ボタンが表示されます。これは、これらのユーザー全員が 1 によってフォローされていることを意味します。なぜ 51 がこれに含まれているのかわかりません。何らかの理由で、ユーザー 2 または 51 歳以上のユーザーのプロファイルに移動すると、次のようになります。
undefined method `model_name' for NilClass:Class
Extracted source (around line #1):
1: <%= form_for(current_user.relationships.find_by_followed_id(@user.id)) do |f| %>
2: <div><%= f.hidden_field :followed_id %></div>
3: <%= f.submit "Follow", class: "btn btn-large btn-primary" %>
4: <% end %>
51 歳以上のプロフィール ページにアクセスできない理由を誰か教えてもらえますか? 関連するコードの残りの部分は次のとおりです。
関係モデル:
class Relationship < ActiveRecord::Base
attr_accessible :followed_id, :follower_id
belongs_to :follower, class_name: "User"
belongs_to :followed, class_name: "User"
validates :follower_id, presence: true
validates :followed_id, presence: true
end
ユーザーモデル:
class User < ActiveRecord::Base
has_many :microposts, dependent: :destroy
has_many :relationships, foreign_key: "follower_id", dependent: :destroy
has_many :followed_users, through: :relationships, source: :followed
has_many :reverse_relationships, foreign_key: "followed_id", class_name: "Relationship", dependent: :destroy
has_many :followers, through: :reverse_relationships, source: :follower
attr_accessible :email, :name, :password, :password_confirmation, :remember_token
ビューの部分に従ってください:
<%= form_for(current_user.relationships.find_by_followed_id(@user.id)) do |f| %>
<div><%= f.hidden_field :followed_id %></div>
<%= f.submit "Follow", class: "btn btn-large btn-primary" %>
<% end %>
ビューの部分的なフォローを解除:
<%= form_for(current_user.relationships.find_by_followed_id(@user),
html: {method: :delete}) do |f| %>
<%=f.submit "Unfollow", class: "btn btn-large" %>
<% end %>
上記の 2 つのパーシャルをレンダリングするフォームに従います。
<% unless current_user?(@user) %>
<div id="follow_form">
<% if current_user.following?(@user) %>
<%= render 'unfollow' %>
<% else %>
<%= render 'follow' %>
<% end %>
</div>
<% end %>
ちなみに、これはMichael Hardtlチュートリアルからのもので、誰でもこれを解決するのに役立ちます.