NoMethodError - undefined method 'find_by' für []:ActiveRecord::Relation
Habe ich Michael Heartl tutorial zum erstellen einer follow-system, aber ich habe eine seltsame Fehlermeldung: "undefined method `find_by' für []:ActiveRecord::Relation". Ich bin mit entwickeln, für die Authentifizierung.
Meinem view /users/show.html-Code.erb sieht so aus:
.
.
.
<% if current_user.following?(@user) %>
<%= render 'unfollow' %>
<% else %>
<%= render 'follow' %>
<% end %>
User model 'models/user.rb' :
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
has_many :authentications
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
def following?(other_user)
relationships.find_by(followed_id: other_user.id)
end
def follow!(other_user)
relationships.create!(followed_id: other_user.id)
end
def unfollow!(other_user)
relationships.find_by(followed_id: other_user.id).destroy
end
end
Relationship-model 'models/Beziehung.rb':
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
Rails sagt mir, dass das Problem im Benutzer-Modell : "Beziehungen.find_by(followed_id: other_user.id)", weil mthod ist nicht definiert, aber ich verstehe nicht, warum ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube
find_by
eingeführt wurde in rails 4. Wenn Sie sich nicht mit rails 4, ersetzenfind_by
durch eine Kombination vonwhere
undfirst
.Können Sie auch die dynamische
find_by_attribute
BEISEITE:
Ich schlage vor, Sie ändern Ihre
following?
- Methode zum zurückgeben einer truthy Wert eher als einen Datensatz (oder nil, wenn kein Datensatz gefunden wird). Sie können dies tun, indemexists?
.Einen großen Vorteil von dieser ist es nicht erstellen Sie jedes Objekt, und gerade gibt einen booleschen Wert zurück.
Können Sie
oder