2013-12-09 77 views
0

下面是描述我的UserFriendship模型的模型,該模型的屬性用於在兩個朋友之間創建連接表。某些模型屬性在調用其方法時如何填充?

class UserFriendship < ActiveRecord::Base 


    #attributes: ["id", "friend_id", "user_id", "created_at", "updated_at", "state"] 

    belongs_to :user 
    belongs_to :friend, class_name: 'User', foreign_key: 'friend_id' 

    def send_accept_email 
     UserNotifier.friend_accepted(id).deliver  
    end 

end 

現在有一兩件事我很擔心這裏的是,send_accept_email方法內id變量。我不知道這意味着什麼,或者我可以如何改變它。

我有測試此模型像這樣(使用RSpec的)一個model_spec:

it "should send a friend_accepted email" do 
     @user_1 = FactoryGirl.create(:user_with_all_valid) 
     @user_2 = FactoryGirl.create(:user_with_all_valid_two) 

     # much prefer " user_id: @user_1.id " to 'magic' "user: @user_1" 

     @user_friendship = UserFriendship.create user_id: @user_1.id, friend_id: @user_2.id 

     expect{@user_friendship.send_accept_email}.to change{ActionMailer::Base.deliveries.size}.from(0).to(1) 
end 

並把它傳遞,所以的ActionMailer在嘲弄連接電子郵件還好。但我只是不明白如何規範是如何填充id變量1.

如果我想與狀態機一起使用此方法,並且想將send_accept_email發送給規範外的用戶,那麼我肯定會倒是必須改變方法,像這樣的參數傳遞:

def send_accept_email(specified_id) 
      UserNotifier.friend_accepted(specified_id).deliver 
    end 

,並調用它像這樣:

UserFriendship.send_accept_email(76) 

或者是它的東西做這個(它是如何實際調用的spec):

@user_friendship.send_accept_email 

該方法被鏈接到UserFriendship類的實例的方式。當你這樣做的時候,當send_accept_email(或其他模型方法)被調用時,模型中的id變量會自動填充?是其他模型屬性,自動填充也,所以我有變量,如friend_iduser_idcreated_atupdated_atstate所有設置爲@user_friendship,當我這樣稱呼它的屬性:

@user_friendship.send_accept_email 

有人能解釋這個請慢慢來?

回答

1

id是UserFriendship表中記錄的ID。

您不能使用UserFriendship.send_accept_email,因爲它是一種實例方法而不是類方法。因此您必須在模型的實例(UserFriendship對象)上調用它。

id自動填充,因爲它被解釋爲self.id。所以如果你的一個UserFriendship對象看起來像 <#UserFriendship id:100, user_id:131, friend_id:213, created_at:...>self.id或者只是id裏面的一個實例方法將返回100

希望我明白了。

0

akagr是正確的,當你問

現在有一兩件事我很擔心這裏是send_accept_email方法內部的ID變量。我不知道這意味着什麼,或者我可以如何改變它。

該ID是UserFriendship實例的ID。你沒有向我們展示的是UserNotifier.friend_accepted(id)以及它如何處理UserFriendShip實例的ID。

希望它使用user_id找到合適的用戶的電子郵件地址。如果使用傳遞給friend_accepted的ID查找用戶,它將查找錯誤的用戶。

相關問題