2011-09-07 31 views
0

我有兩種類型的用戶,一個名爲list_owner,一個名爲subscriber。這些都是用設計製造的用戶。訂閱者應該能夠關注list_owner。我有另一個稱爲關係的模型來跟蹤訂戶跟隨的人。訂閱者需要關注列表所有者,但得到錯誤

我主要以http://ruby.railstutorial.org/爲例。

這些

class Relationship < ActiveRecord::Base 

    attr_accessible :list_owner_id, :subscriber_id 

    belongs_to :list_owner 
    belongs_to :subscriber 

end 

class ListOwner < ActiveRecord::Base 

    has_many :messages 
    has_many :relationships, :dependent => :destroy, :foreign_key => "list_owner_id" 

end 

class Subscriber < ActiveRecord::Base 

    has_many :relationships, :foreign_key => "subscriber_id", 
          :dependent => :destroy 

def follow!(list_owner) 
     puts "-----------------------" 

    relationships.create!(:subscriber_id => subscriber.id, :list_owner_id => list_owner.id) 
end 

end 

我做了列表所有者的按鈕在那裏用戶可以訂閱列表中的關係。

<%= form_for current_subscriber.relationships.build(:list_owner_id => l.id, :subscriber_id => @subscriber.id), 
       :remote => true do |f| %> 
    <%= f.hidden_field :list_owner_id %> 
    <%= f.hidden_field :subscriber_id %> 
    <%= f.submit "Subscribe", :class => "button btn" %> 
<% end %> 



class RelationshipsController < ApplicationController 
    def create 
    puts "---------------------relationships CREATE---------------------" 
    @list_owner = ListOwner.find(params[:relationship][:list_owner_id]) 
    current_subscriber.follow!(@list_owner) 
     redirect_to root_path 
    end 

end 

這是我得到的錯誤。我究竟做錯了什麼?

Started POST "/relationships" for 127.0.0.1 at Wed Sep 07 15:37:17 +0200 2011 
    Processing by RelationshipsController#create as JS 
    Parameters: {"commit"=>"Subscribe", "relationship"=>{"list_owner_id"=>"2", "subscriber_id"=>"1"}, "authenticity_token"=>"m5plsJLdzuwNt1yKfDJFKD28GcR138V+pezbfbECCPk=", "utf8"=>"✓", "_"=>""} 
    ListOwner Load (0.2ms) SELECT "list_owners".* FROM "list_owners" WHERE "list_owners"."id" = 2 LIMIT 1 
    Subscriber Load (0.2ms) SELECT "subscribers".* FROM "subscribers" WHERE "subscribers"."id" = 1 LIMIT 1 
Completed 500 Internal Server Error in 34ms 

NameError (undefined local variable or method `subscriber' for #<Subscriber:0x102f140c0>): 
    app/models/subscriber.rb:21:in `follow!' 
    app/controllers/relationships_controller.rb:8:in `create' 

回答

2

有沒有定義這樣的「用戶」對象,但你並不需要一個,因爲你調用該協會收集,這將預先填充父對象的創造!()方法。也就是說,調用subscriber.relationships.create!將設置subscriber_id = subscriber.id。

def follow!(list_owner) 
    relationships.create!(:list_owner_id => list_owner.id) 
end