Ruby on rails 好友系统不工作

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

嘿,大家好,我已经离开rails一段时间了,并且一直在追赶Rails3,我想我的问题可能是因为我使用了Rails2中不受支持的语法,而Rails3没有使用。无论如何,我的问题可能很广泛,但尽管我已经解决了这个应用程序的所有其他问题,但这个问题仍然困扰着我

在网站主页上有以下代码:

<%- 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非常感谢,我确实忘记了控制器中有一个前置过滤器,我甚至不认为这可能是原因,给人留下深刻印象的是,你在没有看到控制器其余部分的情况下就推断出了它,现在开始工作:)非常感谢,我忘记了控制器中有一个前置过滤器,我甚至不认为这可能是原因,给人留下深刻印象的是,你甚至没有看到控制器的其余部分就推断出了它,现在它开始工作:)