0

Ruby on Railsを勉強していて、ログイン部分を作成するdeviseを使ってこのシンプルなブログシステムを作ろうとしています。

この質問は非常に簡単な答えを持っているはずですが、Googleを使用しても見つからないため、最終的にあきらめてここで質問することにしました。

devise によって作成された Users テーブルと、scaffold コマンドによって作成された Posts テーブルがあります。

Posts テーブルには user_id フィールドがあります。投稿の作成では、次のコードを使用します。

  def create
    @post = Post.new(params[:post])
    @post.user_id = current_user.id

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

このようにして、ユーザー ID を取得し、この関係を作成します。

これは私の投稿モデルです:

class Post < ActiveRecord::Base
  attr_accessible :body, :title, :user_id

  belongs_to :user

end

ここで、list メソッドで作成者の名前を表示するだけです。

私はいくつかのことを試しましたが、どれもうまくいかないようです。

ユーザー ID の代わりにユーザー名を投稿にリンクするにはどうすればよいですか?

私の現在のインデックス方法は標準的なものです:

  def index
    @posts = Post.all

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

その Post.all にパラメーターを追加する必要があることはわかっていますが、どうすればよいでしょうか?

ありがとう!

注: Rails 3 と PostgreSQL を使用しています。

4

2 に答える 2

1

リレーションシップを通じてユーザー オブジェクトにアクセスできます。

@post.user.name

リレーションシップを熱心に読み込みたい場合は、@posts = Post.allステートメントを次のように変更できます。

@posts = Post.includes(:user)
于 2012-10-01T14:51:32.427 に答える
0

ユーザー名がにあると仮定すると、User#nameビューに次のようなものを追加することで表示できます。

<%= post.user.name %>

あなたのposts/index.html.erbビューには、おそらくいくつかのコードalaがあります

<% @posts.each do |post| %>
  <tr>
    <td><%= post.name %></td>
    ...
  </tr>
<% end %>

作成者名で別のテーブルセルを追加すると、次のようになります。

<% @posts.each do |post| %>
  <tr>
    <td><%= post.name %></td>
    <td><%= post.user.name %></td>
  </tr>
<% end %>
于 2012-10-01T14:50:35.867 に答える