0

私は、skillshare.com で 1 か月の Rails コースを受講していますが、自分で (まだ) 解決できていない問題に遭遇しました。

ピンタレストに似たシンプルなアプリを作っています。写真を投稿した後、写真の下にユーザー名を取得しようとしている段階です。「投稿者: (名前)」と表示されます。

エラーのあるコードは次のとおりです。

<div class="box">
<%= link_to (image_tag pin.image(:medium)), pin %>
<p class="description">
    <%= pin.description %>
</p>
<p>
    <strong>
        Posted by: <%= pin.user.name %>
    </strong>
</p>
<% if current_user == pin.user %>
    <p>
      <%= link_to 'Edit', edit_pin_path(pin) %>
      <%= link_to 'Destroy', pin, method: :delete, data: { confirm: 'Are you sure?' } %>
    </p>
<% end %>

強力なタグの間の中央に、「投稿者: <%= pin.user.name %>」があります。.name を取り出してみたところ、「未定義のメソッド 'name」」なしでサイトが読み込まれますが、奇抜な数字がたくさん表示されます (これは、Ruby または Rails がユーザーを定義するものであり、名前がそれに割り当てられていると推測しています)。現在表示されている数字のバッチ)。

私の推測では、どこかで .name を定義する必要があると思います。これをどこでどのように行うべきかはよくわかりません。誰かがこれを見ることができれば、私は感謝します。ありがとう!

** show.html.erb ファイルでこのコードを見つけました

<div class"row">
    <div class="span6 offset3">
        <div class="well">
            <%= image_tag @pin.image %>
            <%= @pin.description %>
            <p>
              <%= @pin.user.name %>
            </p>
            <% if current_user == @pin.user %>
            <%= link_to 'Edit', edit_pin_path(@pin) %> 
            <% end %>|
            <%= link_to 'Back', pins_path %>
        </div>
    </div>
</div>

この場合、 pin.user.name は機能しますが、上記のコードの最初のスニペットではまだ機能しません。

モデル/user.rb

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :token_authenticatable, :confirmable,
  # :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :rememberable, :trackable, :validatable #recoverable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me, :name
  # attr_accessible :title, :body

  has_many :pins, :dependent => :destroy
end
4

3 に答える 3

0

私もこの授業を受けています。別の問題がありますが、クラスの資料を読むと、修正するための明確な手順がいくつかありました。

トラブルシューティングの注意: ユーザーが関連付けられていないピンは削除する必要があります。そうしないと、ピンのインデックス ページを読み込もうとしたときに、nil:NilClass の未定義のメソッド 'name' というエラーが発生します。次の手順を実行します:

$ rails console
>> Pin.destroy_all(user_id: nil)
$ heroku run rails console
>> Pin.destroy_all(user_id: nil)
于 2013-09-18T01:49:36.317 に答える
0

pinを持たないレコードがいくつかあると思いますuser_idrails c次のステートメントでRails コンソール ( ) を使用して、これを確認する必要があります。

Pin.where(:user_id => nil)

ユーザーモデルに似たようなものを追加して、対応するユーザーがvalidates :user_id, :presence => true確実に存在するようにします。pin

于 2013-06-07T19:21:49.923 に答える