2016-06-14 13 views
0

投稿したcurrent_userにすべての新しい投稿を割り当てたいと思います。各投稿に「user_id」の代わりに「user_first_name」を表示する方法

私は投稿の一番上に投稿している人のuser_idを表示することができましたが、user_first_nameでプロセスを適用しようとすると機能しません。私はそれぞれ@post.user_idを表示しています。各投稿の@post.user_first_nameを表示するにはどうすればよいですか?

これはFeed.controllerです:

before_action :require_user, only: [:index, :feed] 

def feed  
    @posts = Post.all.order(created_at: :desc) 
    @post = Post.new 
end 

def new 
    @post = Post.new 
end 

def create 
    @post = Post.new(post_params) 
    @post.user_id = current_user.id 

    if @post.save 
    redirect_to '/' 
    else 
    render 'new' 
    end 
end 

private 

def post_params 
    params.require(:post).permit(:content, :user_id) 
end 

これはCreatePostモデルです:

def change 
    create_table :posts do |t| 
    t.text :content 
    t.integer "user.id" 
    t.timestamps null: false 
    end 
end 
end 

これがでCreateUserモデルです:

def change 
    create_table :users do |t| 
     t.string :first_name 
     t.string :last_name 
     t.string :email 
     t.string :password_digest 

     t.timestamps 
    end 
    end 
end 
+0

'user_first_name'はどこに定義されていますか?データベースに 'fist_name'カラムがあった場合は' user.first_name'となります。だからあなたのユーザーモデルを表示する必要があります。ちなみに、 "CreatePost Model"は本当に1つのファイルですか?そうであれば、間違っています。 'belongs_to:user'は' app/models/post.rb'に入り、 'def change'パーツは移行に入ります。 –

+0

@ post.user.first_nameを定義しようとしていますか?私はCreateUserモデルを追加していて、belongs_toとhas_manyをあなたに変更しました。 – Yohan

+1

それは問題だったよ! belongs_toとhas_manyが間違った場所にあった^^今は動作します。ありがとうございました !!! – Yohan

答えて

0

私はすべての新しいポストを割り当てますそれを投稿しているcurrent_userに送信します。メソッドを作成し、あなた、あなたがそう

def create 
    if current_user.posts << Post.new(post_params) 
    redirect_to root_path #'/' 
    else 
    render :new 
    end 
end 

私は各ポストの@のpost.user_first_name

を表示するために行うには何が必要ですかのようにこれを行うことがで

http://apidock.com/rails/ActiveRecord/Associations/AssociationCollection/ < <

これを行う最善の方法は、あなたのpを開くことですapp/models/post.rb

class Post < ActiveRecord::Base 
    belongs_to :user 

    delegate :first_name, to: :user, prefix: true 
end 

@post.user_first_name 

でOSTモデルは、私はuser_idpost表の列であり、したがってあるので、あなたがこれを行うことができます理由は、各@のpost.user_idに

を表示していますインスタンスメソッドPostクラスです。 user_first_nameは、UserクラスのPostクラスのインスタンスメソッドではありません。委任を使用して、使用しようとしているこのメソッドを作成できます。

関連する問題