2011-01-24 51 views
0

我在我的Rails應用程序一個帖子模式,先後爲發件人,我想與CURRENT_USER由Authlogic產生自動填表/數據庫字段。基本上,我想跟蹤創建/發送「帖子」的人,不允許他們更改該字段。Rails 3:根據當前用戶自動填寫表單/數據庫字段?

我試圖從下面的另一個StackOverflow問題中使用以下技巧,只要表單中有一個字段,它就會起作用。

def new 
    @post = Post.new :sender => current_user.username 

    respond_to do |format| 
    format.html # new.html.erb 
    format.xml { render :xml => @post } 
    end 
end 

我在找的是一種在數據庫中自動填充該值的方法,對用戶隱藏並且不需要表單輸入。

這是什麼最好的方法呢?

在此先感謝您的幫助!

〜丹

回答

2

聽起來像是你應該建立兩者之間的關係模型,或者說是你有什麼了。

在創建方法只是這樣做

@post = current_user.posts.create(params[:post]) 

這需要在前端沒有現場和強制執行評論

聽起來像是你的用戶和他們的崗位

編輯之間的關係需要改變post.rb

belongs_to :user 

belongs_to :sender, :class_name => "User" 

編輯到架構

根據你的模型你只是存儲發送/接收的字符串,因爲這是你需要做的的情況是這樣的:

in controller#create 
@post = Post.create(params[:post]) 
@post.sender = current_user.username 

編輯:這個怎麼做正確

基於您的評論,它看起來像你想這樣做在關係的方式,不錯。

首先,對於您的文章,您需要將發件人和收件人更改爲整數,然後分別重命名sender_id和receiver_id。

接下來在您的用戶。RB模型,您需要具備以下條件:

has_many :sent_posts, :foreign_key => "sender_id" 
has_many :received_posts, :foreign_key => "receiver_id" 

在你post.rb模型,你需要具備以下條件:

belongs_to :sender, :class_name => "User" 
belongs_to :receiver, :class_name => "User" 

現在你可以做創建後

以下時
@post = current_user.sent_posts.create(params[:post]) 

而且可用以下方法

@post.sender    #=> gets the sender 
@post.receiver    #=> gets the receiver 
current_user.sent_posts  #=> all posts from this user 
current_user.received_posts #=> all posts for this user 

注意我不能夠驗證這一點,但我敢肯定,上面應該爲你工作,可能有一些輕微的錯誤,因爲我目前不能仔細檢查

+0

我可能需要在另一個問題中提出這個問題,但是現在我得到了一個「未定義的方法`user_id ='for#」錯誤。我可能做錯了什麼? – thoughtpunch 2011-01-24 18:50:58

0

你總是可以有模式before_create對於一個場隨着PARAMS增加值..這將確保增加的價值被執行創建語句之前..

0

嗯..爲什麼不這樣做,在create行動:

def create 
    @post = Post.create(params[:post].merge({:sender => current_user.username})) 
end 
+0

這給出了一個「未定義的方法`合併'爲零:NilClass「錯誤供參考。 〜Dan – thoughtpunch 2011-01-24 18:59:11

相關問題