1

「投稿」のタイトル(文字列)と本文(コンテンツ)の足場を生成したレールアプリケーションがあります。

これにより、投稿を作成、編集、および削除できます。

devise をインストールしたばかりなので、アプリケーションにユーザーを含めることができます。唯一の問題は、ログインしているものに関係なく、同じ投稿が表示されることです。

各ユーザーに特定の投稿をする方法はありますか? 投稿またはユーザー モデルを変更するか、新しいコントローラーを追加する必要がありますか?

それがあなたを混乱させた場合、別の言い方をすれば、各ユーザーが他のユーザーが見ることができない独自の「投稿」を作成したいということです。

アップデート

ここにposts_controllerがあります

class PostsController < ApplicationController
before_filter :authenticate_user!, except: [:index, :show]

# GET /posts
# GET /posts.json
def index
  # @posts = current_user.posts
  @posts = Post.all

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

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

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

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

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

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

# POST /posts
# POST /posts.json
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.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

# PUT /posts/1
# PUT /posts/1.json
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.json { head :no_content }
    else
      format.html { render action: "edit" }
      format.json { render json: @post.errors, status: :unprocessable_entity }
    end
  end
end

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

  respond_to do |format|
    format.html { redirect_to posts_url }
    format.json { head :no_content }
  end
end
end

そして、これがポストモデルです

class Post < ActiveRecord::Base
  attr_accessible :content, :name

  belongs_to :user
end
4

4 に答える 4

0

user_id = current_userの投稿のみを表示するように、ビューや投稿コントローラーを変更する必要があります。また、投稿モデルにuser_idが含まれている必要があります。ここにコードを追加すると、誰かがあなたを助けることができると思います

更新しました :

has_many:postsをユーザーモデルに追加します

そして、ポストコントローラーに交換します:

def index
 @posts = current_user.posts

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

また、投稿モデルにuser_id列がありますか?

于 2012-11-24T22:08:31.093 に答える
0

ユーザーは複数の投稿を持つことができるため、ユーザーモデルに関連付けを追加する必要があるため、これをユーザーモデルに追加します

has_many :posts

次に、投稿コントローラーのインデックスメソッドで、次のようにします

respond_to :html, :xml, :json

def index
  @posts = current_user.posts    
  respond_with(@post)
end

Respond_withについては、クラスメソッドrespond_toでサポートされているリソース形式を指定できます。次に、コントローラーアクションで、respond_withを使用して配信されるリソースまたはリソースをコントローラーに伝えます

于 2012-11-25T07:35:38.313 に答える
0

Postsコントローラ@posts = current_user.postsでは index メソッドを使用します。

Post および Userモデルbelongs_toで、Post User/Userhas_many投稿の関係を設定する必要があります。

これで、投稿/インデックスのビューは @posts を反復処理できるようになり、それらはそのユーザーだけのものになります。

于 2012-11-24T22:06:52.543 に答える
-1

もちろん、ユーザーとその投稿の間に関連付けを設定することもできます。

于 2012-11-24T22:07:46.733 に答える