下面是描述我的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_id
,user_id
,created_at
,updated_at
,state
所有設置爲@user_friendship
,當我這樣稱呼它的屬性:
@user_friendship.send_accept_email
有人能解釋這個請慢慢來?