我正在关注skillshare.com上的一个月Rails课程并遇到了一个我自己无法修复的问题。
我正在创建一个类似于pinterest的简单应用。我正处于一个步骤,我们试图在他们发布图片后在他们的照片下获得用户名。它会说“发布者:(姓名)。”
这是我的代码有错误:
<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 %>
在强标签之间的中心,我有“发布者:&lt;%= pin.user.name%&gt;”。我尝试取出.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
答案 0 :(得分:0)
我猜你有一些pin
条记录,没有user_id
。您应该使用rails控制台(rails c
)并使用以下语句来检查:
Pin.where(:user_id => nil)
向您的用户模型添加validates :user_id, :presence => true
之类的内容,以确保pin
有相应的用户。
答案 1 :(得分:0)
好的,所以我们已经确定这应该是部分的。在这种情况下,您需要传入要渲染的form_for
变量。我可能不正确,但我相信你的意思如下。这将在模型对象周围创建一个表单和一个范围。因此,在这种情况下,我相信您将拥有以下内容:
<%= form_for(@pin) do |f| %>
<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>
<% end %>
</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 %>
<% end %>
答案 2 :(得分:0)
我也在上这门课。有另一个问题,但阅读课堂材料有一些明确的步骤来纠正:
故障排除注意:您应该删除没有与之关联的用户的任何引脚,否则当您尝试加载引脚索引页时,您将获得nil的未定义方法'name':NilClass错误。请按照以下步骤操作:
$ rails console
>> Pin.destroy_all(user_id: nil)
$ heroku run rails console
>> Pin.destroy_all(user_id: nil)