2017-05-01 7 views
1

私はこれで少し失われているので、私は活動の宝石と工夫の宝石を供給しています。データベースの出力をフィルタリングする

は私が指定したユーザーによって行われたすべての記事を一覧表示する機能を持つようにしたい

コントローラ

def userstory 
@userstory = Story.where(params[:user_id]) 
end 

私はまた私のルートが間違っていると思う

<% @userstories = Story.where(:user_ud) %> 

<% @userstories.each do |story| %> 

ビュー

match '/stories/userstory/:user_id',  to: 'stories#userstory',  via: 'get' 
resources :stories, :only =>[:show] 
+3

は物語で試してみてください。どこの(user_id:params [:user_id]) –

+0

どのRailsのバージョン?現在のレールは –

+0

で、コントローラーでparams [:user_id]を定義する必要がありますか? – Jay

答えて

2

最初にstoriesusersを指すuser_id列があることを確認する必要があります。第二に、あなたは正しく関連付けを定義する必要があります。

class Story < ActiveRecord::Base 
    belongs_to :user 
end 

class User < ActiveRecord::Base 
    has_many :stories 
end 

は、その後、あなたのコントローラの追加に:

# I'm assuming this is index on a controller. 
def index 
    @stories = current_user.stories 
end 

あなたはビューで@storiesを参照することができるはずです。

<%= @stories.each do |story| %> 
    <!-- RENDER story HERE --> 
<% end %> 
1

Uあなたがフォームを使ってRailsのparamsを処理する場合、そのようなアクションを実行しないと(フォームを記入して送信してください)、あなたはそれらを扱うことができません。あなたのビューで印刷しようとすると、params[:user_id]の現在の値がnilになることがあります。そのため、findのストーリーをidに送信すると、この場合はnilとなります。

あなたのコントローラ内および対応する方法であなたの@storiesを指定して試してみて、多分同じように、あなたのビューでそれを使用する:ちょうど、私の知る限りでは、以外のすべての動的メソッドを言及する

# app/controllers/stories_controller.rb 
def some_method 
    @stories = Story.find_by_id(params[:user_id]) 
    ... 

find_by _...とfind_by _...! Rails 4バージョン以降では非推奨となっているので、代わりにfind_byまたはwhereを使用したいかもしれません(reference参照)。

、あなたのルートを見て、私はあなたがあなたのナビゲータで「/小説/ userstory/ID」にしていると仮定して、あなたはそれを示すために、いくつかの物語をクリックして、あなたはあなたのStoriesController、このようにメソッドshowを使用する必要がありますそのような物語を見つけるにはparams[:user_id]

+0

また、このメソッドを私のビューでどのように呼び出すのですか? – Jay

+0

コントローラを追加して表示できますか? –

+0

これは私が試しているもので、アイデアはユーザのプロフィールを見ているときです。そのユーザの投稿履歴を見ることができます – Jay

関連する問題