4

さて、レールを学び始めました、そしてもちろん個人的なブログ(livejournalのようなもの)でサービスを書くことから始めました。投稿の足場とユーザーモデルがあります(Deviseに感謝します)。今、私は特定のユーザーによるすべての投稿をURLに/ username / postsのようなもので表示しようとしていますが、このレールを作成する方法を本当に理解できません。ルートにネストされたリソースがすでに作成されています

resources :users do 
  resources :posts 
end

と接続されたユーザーと投稿モデル

has_many :posts

belongs_to :user

ユーザー用のコントローラーを作成する必要がありますか?これには適切な方法がありますか?

PS答えてくれてありがとう。レールを研究しようとしていますが、私が見つけたほとんどすべてのチュートリアルは足場で終わり、それはあまり役に立ちません。

編集1:「一致」のアイデアのおかげで、問題の半分を解決しました。残りの(未解決の)半分は、特定のユーザーによって書かれた投稿を選択することです

編集2:追加

@user = User.where(:username => params[:username])
@posts = @user.posts

コントローラに送信しましたが、postsコントローラに「undefinedmethod`posts'」エラーがあります。

4

2 に答える 2

3

を使用whereすると、単一のオブジェクトではなく、クエリからオブジェクトの配列を取得します。このため、変数にメソッド
がありません。 たぶん、1つだけを取得するには、次のようなものに変更する必要があります。 posts@user
user

@user = User.find_by_username(params[:username])

このようにして、userクエリを1つだけ実行し、.postsエラーなしでrelashionshipを使用できます。

于 2012-08-09T17:54:34.830 に答える
1

使用する場合

resources :users do
   resources :posts 
end

'/ users / 1/posts'のようなURLになります

あなたが書く必要があるIDの場合に最初にユーザー名を持っている

def to_param
  self.username 
end

ユーザーモデルで。

または、URLを/ users /:id / postsにしたくない場合は、matchを使用してルートURLを作成できます。

match ':username/posts' ,'posts#show' 

投稿コントローラーに移動し、アクションを表示します。

于 2012-08-09T17:23:04.737 に答える