2011-05-15 65 views
12

如何關聯我創建時登錄到我的帖子的當前用戶?設計如何將當前用戶與帖子關聯?

我樁模型:

before_create :owner 
belongs_to :user 
def owner 
    self.user_id = current_user.id 
end 

但是dosent工作,因爲我不能在模型中使用的方法CURRENT_USER。

這裏是我的控制器:

class PostsController < ApplicationController 
before_filter :authenticate_user! 

    # GET /posts 
    # GET /posts.xml 
    def index 
    @posts = Post.all 

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

    # GET /posts/1 
    # GET /posts/1.xml 
    def show 
    @post = Post.find(params[:id]) 

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

    # GET /posts/new 
    # GET /posts/new.xml 
    def new 
    @post = Post.new 

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

    # GET /posts/1/edit 
    def edit 
    @post = Post.find(params[:id]) 
    end 

    # POST /posts 
    # POST /posts.xml 
    def create 
    @post = Post.new(params[:post]) 

    respond_to do |format| 
     if @post.save 
     format.html { redirect_to(@post, :notice => 'Post was successfully created.') } 
     format.xml { render :xml => @post, :status => :created, :location => @post } 
     else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @post.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

    # PUT /posts/1 
    # PUT /posts/1.xml 
    def update 
    @post = Post.find(params[:id]) 

    respond_to do |format| 
     if @post.update_attributes(params[:post]) 
     format.html { redirect_to(@post, :notice => 'Post was successfully updated.') } 
     format.xml { head :ok } 
     else 
     format.html { render :action => "edit" } 
     format.xml { render :xml => @post.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /posts/1 
    # DELETE /posts/1.xml 
    def destroy 
    @post = Post.find(params[:id]) 
    @post.destroy 

    respond_to do |format| 
     format.html { redirect_to(posts_url) } 
     format.xml { head :ok } 
    end 
    end 
end 

如何建立關聯?所以,在你創建的行動,後USER_ID coloumn被分配的current_user.id

回答

29

添加

@post.user = current_user 

或者,如果你有User模式has_many :posts協會做:

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

if @post.save 
    ... 
+1

用戶更改current_user和「破解」網站 – Max 2011-05-15 15:45:33

+3

,當你通過hidde_field在窗體中,然後可能,當在控制器 - 安全 – 2011-05-15 15:48:01

21

我建議通過您的用戶創造你的信息:

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

這會自動在user_id爲您填寫。

+0

是不是好? – LearningRoR 2011-05-27 06:24:03

+3

無論哪種方式都不錯。但是你的'show','edit','update'和'destory'方法有一點。以目前的方式,用戶A可以查看,更新或刪除用戶B的帖子。因此,通常最好使用scoped方法來檢索帖子,即'show'中的'@post = current_user.posts.find(params [:id])''。當然,如果你真的想要其他用戶更新對方的帖子,你的方式很好 – PeterWong 2011-05-27 06:35:55

+0

哦,好的,謝謝你的解釋。我將在我的應用程序中使用此方法。 – LearningRoR 2011-05-27 13:30:28

相關問題