Hey all, I have been away from rails for a while and have been catching up to rails 3, I think my problem might stem from me using an unsupported syntax from rails 2 that didnt make it to rails 3. Anyways, my problem might be to broad but while I have been able to fix all the other problems with this app, this one still puzzles me.
On the home page of the site there is this code:
<%- 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 -%>
When I click respond instead of getting to the Connection edit page, I get an error:
undefined method `contact' for nil:NilClass
app/controllers/connections_controller.rb:15:in `edit'
{"id"=>"4"}
The controller code is:
def edit
@contact = @connection.contact
end
The relavent models are, 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
The edit page I am trying to get to is:
<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 %>
I think that is all the relevant code to this issue. If there is anything else you might need to see please let me know, I am very grateful for any an all help. Sorry if it is glare lying obvious, I am learning ruby and rails as a hobby (and loving it so far!).
When you see this error:
It usually means you’re trying to call a method on an unassigned variable. Since the error points to the controller, and the code you’ve shown us is:
I’m going to guess that
@connectionis unassigned. Normally you would expect to have a finder method to retrieve the value before using it, like:Sometimes this code is placed in a
before_filter, to reduce duplication. If you do have such a filter, perhaps it is not being reached. It’s hard to know without seeing the rest of the controller code.