2017-06-27 6 views
1

基本的に私はRailsのチュートリアルに従っています(私は多くの問題を抱えていましたが、それらのほとんどは簡単に解決できました)が、今私はちょうどこの章を始めると私は問題を抱えています。Rails 5.0 Chapter 14 Micheal Hartlチュートリアル未定義のローカル変数active_relationship

ここでは、チュートリアル(表14.1のエクササイズ2の後)のlinkですが、変数が定義されていないため、私は現在このエクササイズでブロックされています。

irb(main):035:0> active_relationship.follower \r 
NameError: undefined local variable or method `active_relationship' for main:Object 
    from (irb):35 

私は、我々は関係の作品を作成し、我々はhas_many:belongs_to:を通じて作成関係をしようとしていることを知っているがやっている正確に理解していません。ここで

irb(main):021:0> user.active_relationships.create!(followed_id: 2)\r 
    (0.1ms) begin transaction 
    User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] 
    User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 2], ["LIMIT", 1]] 
    SQL (0.3ms) INSERT INTO "relationships" ("follower_id", "followed_id", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["follower_id", 1], ["followed_id", 2], ["created_at", 2017-06-27 20:49:11 UTC], ["updated_at", 2017-06-27 20:49:11 UTC]] 
    (57.3ms) commit transaction 
=> #<Relationship id: 1, follower_id: 1, followed_id: 2, created_at: "2017-06-27 20:49:11", updated_at: "2017-06-27 20:49:11"> 

がたて作成されたファイルの内容です:

アプリ/モデル/ relationship.rb

class Relationship < ApplicationRecord 
    belongs_to :follower, class_name: "User" 
    belongs_to :followed, class_name: "User" 
end 

アプリ/モデル/ user.rb

class User < ApplicationRecord 
    has_many :microposts, dependent: :destroy 
    has_many :active_relationships, class_name: "Relationship", 
      foreign_key: "follower_id", 
      dependent: :destroy 
. 
. 
. 

問題はここにあります:なぜ変数(active_relationship)が定義されていないのですが、Rela tionships.allはこれを示しています

#<ActiveRecord::Relation [#<Relationship id: 1, follower_id: 1, followed_id: 2, created_at: "2017-06-27 20:49:11", updated_at: "2017-06-27 20:49:11">]> 

それは、このような関係が作成され、保存されていることを意味し、したがって、メソッド、​​とactive_relationship.followerを介してアクセス可能でなければなりません。 しかし、彼らは定義されていないと私は彼らがなぜそうではないのか分からない。 この小さな問題を解決するのに役立つ情報があれば、私は喜んでください。

答えて

3

user.active_relationshipsの関係(フォロワ/フォローの関係)の配列を使用するか、user.active_relationships.createの結果をactive_relationshipとして保存することで、関係の要素にアクセスすることができます。

あなたの問題がactive_relationshipがあなたのコンテキストで定義されていないということです、チュートリアルは、createの戻り値または関係の配列にアクセスすることにより基づいて、この値を格納しているものとしている必要があります。

+0

私は同じ問題を抱えていましたが、解決策は 'create'アクションから返された値を_assign_に割り当てることでした!この本はそれが_thing_のように読む。ですから、これに感謝しています。 – OnlySteveH

関連する問題