2011-08-03 70 views
0

Ruby on rails noob here。在軌道上的紅寶石中找到用戶對象

與此問題相關的用戶區域:id(prim。key)。發佈與此問題相關的字段:id,user_id(fk)。外鍵是連接到用戶的ID的帖子的user_id。以下是正確的語法嗎?我想抓住誰發佈當前職位的用戶對象: (這是在控制器/ posts_controller.rb)

@id = Post.find(params[:id]).user_id 
@user = User.find(@id) 

你可以看到下面的代碼的情況下:

def sendMessage 
    #@user = current_user 
    @id = Post.find(params[:id]).user_id 
    @user = User.find(@id) 
    UserMailer.welcome_email(@user).deliver 
    respond_to do |format| 
     format.html { render :nothing => true, :status => :ok } 
    end 
end 

原因我問的是因爲電子郵件沒有發送給創建該帖子的用戶。現在,我知道這是不是一個電子郵件問題,因爲,作爲一個測試,我試着註釋掉有問題的兩條線,並簡單地使用:

@user = current_user 

...這將電子郵件發送到誰的用戶登錄(但這不是我想要的)。

由於提前,

馬特

+1

是的,這看起來不錯,你爲什麼不先試試它,並張貼,如果你得到一個錯誤? – timaschew

+0

嗨timaschew,我已經編輯我的帖子來清除事情了。用於測試的 – Matt

+0

嘗試使用'render_text(@user)' – timaschew

回答

3

你應該把你的模型設置如下:

class Post < ActiveRecord::Base 

    belongs_to :user 

end 

class User < ActiveRecord::Base 

    has_many :posts 

end 

然後在你的控制器,你可以這樣做:

@post = Post.find(params[:id]) 
@user = @post.user 
+0

+1來渲染用戶(id),以獲得相同但更快的解決方案:) – apneadiving

+0

thx Ant。我已經在模型中有上面的代碼。我也編輯了我的文章,使其更清楚一點。我試過你的控制器代碼(thx),但仍然沒有發送電子郵件。 – Matt

1

你應該在模型中設置適當的關係。

我猜'用戶'中的has_many:posts'和Post中的'belongs_to:user'。

然後你就可以做到:

@user = Post.find(params[:id]).user 
+0

+1回你:) – Ant