2017-06-16 4 views
1

私はRailsを初めて使い、のすべてが別のshow.html.erbページではなくブートストラップモードになるモデルを作成したいと考えています。私はこのような何か持っている私のshow方法でレイアウト:偽のときに@ postのparams [:id]を取得する方法

:私は、正確なポストを表示するには、今のようparams[:id]から私の@confessionsを取得しています

def show 
    @confessions = Confession.find(params[:id]) 
    @comment = Confessioncomment.where(confession_id: @confessions).paginate(page: params[:page], per_page: 5).order('created_at ASC') 
end 

を私がクリックした、しかし私が欲しいのは示すことではありませんshow pageを別にして、同じページのbootstrap-modalにすべてをロードしてください。

私はlayout :falseを使うことができますが、ショーにはレイアウトはありませんが、私はそれをどのように使用するか、あるいはこれを行う方法が他にあるかどうかはわかりません。

コントローラから新しいページを読み込むのではなく、同じページに投稿を表示するにはどうすればよいですか。

アイデア?

答えて

2

レールビューレンダラを通してロードしないでください。

def show 
    @confessions = Confession.find(params[:id]) 
    @comment = Confessioncomment.where(confession_id: @confessions).paginate(page: params[:page], per_page: 5).order('created_at ASC') 

    render json: @confessions, status: 200 
end 

が続いて動的にロードするためにあなたのJSにそのJSONレスポンスを使用します。代わりに、JavaScriptコード内からブートストラップモーダルをロードする前に、AJAX呼び出しを行うには、レコードを引くが、JSONとしてそれを返すために、エンドポイント/ルートを打ちますモーダル

また、告白のインスタンスモデルを1つだけ戻し、その関係からコメントを引き出す場合は、@confession.commentsとしますが、モデルを適切に設定する必要があります。これにより、2つの異なるインスタンス変数を使用するよりもレンダリングがはるかに簡単になります。

+0

おかげで、これを追加しますアドバイス...私はこれを試して、それが動作するかどうかを確認します:) –

+0

あなたは私に恵まれますか? @confessionsから返されたデータからビューを作成するためにJavaScriptコードでJSONを返す方法を説明できますか? これは大きな助けになります..ありがとう –

+0

@AlaapDhall jQuery + Bootstrapと同じように使用できます動的にモーダルを構築し、成功ハンドラをキャッチします。例のためにここでstackoverflowを検索しようとすると、たくさんあるはずです。がんばろう! –

0

まず、レイアウトfalseが

Railsはいくつかのデフォルトの動作で動作する...あなたは何を考えているのではありません。アプリケーションのすべてのルートは、コントローラにメソッド定義がない場合でも、同じ名前のビューを呼び出します。

どのメソッドでも別のテンプレートをレンダリングすることができない場合は、その最後にレンダリング関数を呼び出す必要があります。

def show 
    @confessions = Confession.find(params[:id]) 
    @comment = Confessioncomment.where(confession_id: @confessions).paginate(page: params[:page], per_page: 5).order('created_at ASC') 
    render 'another/page', layout: false 
end 

私がそのコードでレールに伝えるのは、そのパスから別の/ページのテンプレートをレイアウトfalseでレンダリングすることです。

今、レイアウトが偽であることを教えてください。

あなたの新しいプロジェクトには、アプリケーションの他のすべてのページを生成するapplication.htlm.erbレイアウトが付属しています。レイアウトによってページが生成されることを望んでいない場合があるので、レイアウトをfalseにするか、layout: 'another/layout'を適用します。お使いのコントローラでの自白のリスト/テーブル内

1

<%= link_to @confession.title, @confession, remote: true %> 

def show 
    @confessions = Confession.find(params[:id]) 
    @comment = Confessioncomment.where(confession_id: @confessions).paginate(page: params[:page], per_page: 5).order('created_at ASC') 

    respond_to do |format| 
    format.html 
    format.js 
    end 
end 

ファイルを作成show.js.以下の内容で、ERBは

$('#dynamically_filled').find('.modal-dialog:first').html("<%=j render('confession') %>"); 
$('#dynamically_filled').modal(); 

show.html.erbの上部にため

<div class="modal fade" tabindex="-1" role="dialog"> 
    <div class="modal-dialog" role="document"> 

    </div><!-- /.modal-dialog --> 
</div><!-- /.modal --> 

_confession.html.erb必見コンテキストの内容は残り

<div class="modal-content"> 
    <div class="modal-header"> 
    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> 
    <h4 class="modal-title"><%= @confession.title %></h4> 
    </div> 
    <div class="modal-body"> 
    <p><%= @confession.content %></p> 
    </div> 
</div><!-- /.modal-content --> 
関連する問題