Ruby on rails 好友系统不工作
嘿,大家好,我已经离开rails一段时间了,并且一直在追赶Rails3,我想我的问题可能是因为我使用了Rails2中不受支持的语法,而Rails3没有使用。无论如何,我的问题可能很广泛,但尽管我已经解决了这个应用程序的所有其他问题,但这个问题仍然困扰着我 在网站主页上有以下代码:Ruby on rails 好友系统不工作,ruby-on-rails,ruby,Ruby On Rails,Ruby,嘿,大家好,我已经离开rails一段时间了,并且一直在追赶Rails3,我想我的问题可能是因为我使用了Rails2中不受支持的语法,而Rails3没有使用。无论如何,我的问题可能很广泛,但尽管我已经解决了这个应用程序的所有其他问题,但这个问题仍然困扰着我 在网站主页上有以下代码: <%- unless @requested_contacts.empty? -%> <h2>Contact Requests</h2> <ul class="list
<%- unless @requested_contacts.empty? -%>
<h2>Contact Requests</h2>
<ul class="list requests small">
<%- @requested_contacts.each do |contact| -%>
<%- conn = Connection.conn(current_user, contact) -%>
<li>
<p><%= person_link contact %></p>
<p class="meta published">
<%= time_ago_in_words(conn.created_at) %>
ago
</p>
<p>
<%= link_to "Respond", edit_connection_path(conn) %> |
<%= link_to "View profile", contact %>
</p>
</li>
<%- end -%>
</ul>
<%- end -%>
控制器代码为:
def edit
@contact = @connection.contact
end
相关型号为Person.rb:
has_many :connections
has_many :contacts, :through => :connections, :order => 'people.created_at DESC'
has_many :requested_contacts, :through => :connections, :source => :contact
Connection.rb:
belongs_to :person
belongs_to :contact, :class_name => "Person", :foreign_key => "contact_id"
def conn(person, contact)
find_by_person_id_and_contact_id(person, contact)
end
我试图进入的编辑页面是:
<h2>Contact request</h2>
<p>You have a contact request from <%= @contact.name %></p>
<% form_for(@connection) do |f| %>
<p>
<%= f.submit "Accept", :class => "button" %>
<%= f.submit "Decline", :id => nil, :class => "button" %>
</p>
<% end %>
联系请求
您有来自的联系请求
“按钮”%>
无,:类=>“按钮”%>
我认为这就是与这个问题相关的所有代码。如果您还有什么需要看的,请告诉我,我非常感谢您的帮助。很抱歉,如果眩光是显而易见的,我将学习ruby和rails作为一种嗜好(到目前为止我很喜欢!)。问题是你似乎把事情搞混了。在控制器的编辑方法中,您引用了
@connection
,据我们所知,它还没有被实例化,正如Zettetic所说,因此它是nil
,然后您尝试调用它的方法。看来我们需要更多的信息
我相信您的
def conn(person,contact)
应该是一个类方法:def self.conn(person,contact)
,基于您调用它的方式(不是从对象而是直接从类)
基本上,问题是conn
被认为是nil
,我相信这是因为我上面提到的原因,但如果不是,那么找出为什么会找到你的答案
编辑:如果仍然出现相同的错误,建议您在rails控制台
中尝试
Connection.find_by_person_id_and_contact_id(person, contact)
请尝试在生成错误的表单中使用相同的信息。最可能的问题是,此人和联系人之间没有联系。如果您确定有,但上面的方法不这么说,那么很可能是您如何设置关联的问题。请记住,您不仅必须在类中指定关联,还必须相应地修改表以反映关联。问题在于您似乎把事情弄混了。在控制器的编辑方法中,您引用了
@connection
,据我们所知,它还没有被实例化,正如Zettetic所说,因此它是nil
,然后您尝试调用它的方法。看来我们需要更多的信息
我相信您的
def conn(person,contact)
应该是一个类方法:def self.conn(person,contact)
,基于您调用它的方式(不是从对象而是直接从类)
基本上,问题是conn
被认为是nil
,我相信这是因为我上面提到的原因,但如果不是,那么找出为什么会找到你的答案
编辑:如果仍然出现相同的错误,建议您在rails控制台
中尝试
Connection.find_by_person_id_and_contact_id(person, contact)
请尝试在生成错误的表单中使用相同的信息。最可能的问题是,此人和联系人之间没有联系。如果您确定有,但上面的方法不这么说,那么很可能是您如何设置关联的问题。请记住,您不仅必须在类中指定关联,还必须相应地修改表以反映关联。假设您的关联正常,并且person引用了一个连接
假设您的关联正常,并且此人引用了一个连接,则将此行
替换为
当您看到此错误时,请将此行替换为
:
undefined method `contact' for nil:NilClass
这通常意味着您试图对未赋值变量调用方法。由于错误指向控制器,您向我们显示的代码是:
def edit
@contact = @connection.contact
end
我猜@connection
是未分配的。通常情况下,您希望在使用该值之前有一个finder方法来检索该值,如:
@connection = Connection.find(params[:id])
有时,将此代码放在过滤器前的中,以减少重复。如果您确实有这样一个过滤器,可能无法访问它。如果看不到控制器代码的其余部分,就很难知道。当您看到此错误时:
undefined method `contact' for nil:NilClass
这通常意味着您试图对未赋值变量调用方法。由于错误指向控制器,您向我们显示的代码是:
def edit
@contact = @connection.contact
end
我猜@connection
是未分配的。通常情况下,您希望在使用该值之前有一个finder方法来检索该值,如:
@connection = Connection.find(params[:id])
有时,将此代码放在过滤器前的中,以减少重复。如果您确实有这样一个过滤器,可能无法访问它。如果看不到控制器代码的其余部分,就很难知道了。谢谢你的帮助,我会设法弄清楚发生了什么事情,使conn变成零!你试过我的第一个建议了吗?将def conn更改为def self。conn谢谢您的帮助,我将尝试找出发生了什么,以使conn变为零!你试过我的第一个建议了吗?将def conn更改为def self.conn非常感谢,我确实忘记了控制器中有一个前置过滤器,我甚至不认为这可能是原因,给人留下深刻印象的是,你在没有看到控制器其余部分的情况下就推断出了它,现在开始工作:)非常感谢,我忘记了控制器中有一个前置过滤器,我甚至不认为这可能是原因,给人留下深刻印象的是,你甚至没有看到控制器的其余部分就推断出了它,现在它开始工作:)