1

我從php轉移到rails3,我仍然認爲這是一個很好的決定!反正我有一些型號:rails3模型問題

users 
questions 
answers 
question_id 
votes 
user_id 
answer_id 

模式,爲用戶:

has_many :questions 
has_many :votes 

模型問題:

belongs_to :user 
has_many :answers, :dependent => :destroy 
accepts_nested_attributes_for :answers, :reject_if => lambda { |a| a[:text].blank? }, :allow_destroy => true 

模型答案:

belongs_to :question 
has_many :users, :through => :votes, :dependent => :destroy 
has_many :votes 

模型票:

belongs_to :answer 
belongs_to :user 

現在我的問題,一旦用戶投票的答案,對於用戶和特定問題的表決應該關閉......

我使用的設計,並在康康舞爲用戶和授權我的項目的其餘部分...

在我看來,它應該是這個樣子:

<% unless current_user.question_answered.include? question %> 

,然後執行腳本,我呈現了投票按鈕...

在我的票模型我有一個 answer_id和user_ID的,我知道 current_user.id和當前question.id 所以如果vote.user_id有vote.answer_id是在當前question.id比它不應該使我的按鈕製作腳本... aarghh,但如何使這個工作...?

非常感謝! 和問候, 泰斯

回答

2

我會親自去設計和寫我自己的方法。我認爲這是一個更清潔,更容易理解的。您還將通過此方法保證您只對數據庫執行單個快速查詢。通過詢問current_user.questions_answered您要查詢的所有問題的數據庫用戶已回答,這可能是一個更大的結果集,不是檢查,如果用戶投票當前問題:

class User 
    def can_vote_on? question 
    !question.answers.joins(:votes).where('votes.user_id = ?', id).exists? 
    end 
end 

然後,您可以調整您的視角到:

<% if current_user.can_vote_on?(question) %> 
+0

謝謝!我會在今天測試它,讓你知道,我做了rails 3教程,這是michael hartl的教程,在那裏他們還寫了一個用戶登錄模型...根據許多人的說法,我認爲設計很好,但是製作一個自己的模型應該是更輕的,這是真的! – Thijs 2011-04-03 07:10:02

+0

嗨,我已經做了一個用戶控制器...但我想我做錯了什麼...?如果我仍然使用設計,我應該在哪裏放置「類用戶」的代碼?謝謝! – Thijs 2011-04-03 08:24:55

+0

您應該將用戶模型中的代碼不在控制器中。 – tommasop 2011-04-03 16:03:16

1

的能力寫這樣的事情

can :vote, Answer, :votes => { :users => user } 
在你看來

這樣做

<% if can? :vote, Answer %> 

(我真的不能測試它現在這樣讓我知道如果它的工作原理)

+0

謝謝!我會測試它今天,也是另一種選擇...上面的那個... – Thijs 2011-04-03 07:06:12

+0

它不是可以因爲它在用戶本身,而不是其他用戶...無論如何感謝! – Thijs 2011-04-04 11:26:20