2016-10-19 6 views
-2

私は書籍レビュー/オンラインブックグループアプリを作成しています。表示するレビューを判断するための条件付きロジックを使用した書籍のレビュー

個々の書籍の表示ページで、レビュー、スポイラーまたはすべてのレビューを表示するかどうかをユーザーに決定させたいと思います。したがって、ページが読み込まれると、本の主要情報と、3つのボタン:See Reviews,See Spoilers,See Allが表示されます。

これは完全に簡単な作業でなければならないようです。 JSとjQueryを使用していた場合は、すべての要素を非表示にし、ボタンがオブジェクト・スポイラー・コードと一致する場合にjQueryがトリガーするようにしますが、これはRailsでは機能しません。

私はビューでjsをやってみました、私は自分のルートを介してロジックを実行しようとした、私はコントローラとヘルパーの機能を試して何も動作していない! Auuugghh!私はほぼ2日間この作業をしていましたが、コンピュータを壊したくなりました.6ヵ月後に初めてRailsに戻ったプロジェクトです。主にNodeで作業していましたが、Railsは錆びています。ここには関連するかもしれないコードがありますが、それはRailsなので、あちこちにあるので、ここにあるgithubレポを見るほうが簡単かもしれません。 https://github.com/nwimmer123/readit_rails

私はStackOverflowを読んでAPIDockを読んできましたが、これを理解することはできませんでした。どんな助けでも大歓迎です。

show.html.erb

<div class="container"> 
    <%= button_to "Show Reviews", class: "btn btn-primary col-xs-2" %> 
    <%= button_to "Show Spoilers", class: "btn btn-primary col-xs-2" %> 
    <%= link_to "Show It All", controller: "books", method: "find_reviews", class: "btn btn-primary col-xs-2"%> 

    </div> 

<% if @show_the_reviews == true %> 
    <div class="container"> 
     <% @reviews.each do |review| %> 
     <% if review.book_id.to_s == params[:id].to_s %> 
     <div class="review"> 
      <div> 
      <strong><%= review.user.name %></strong> 
      <% if review.spoiler == "1" %> 
       <span class="center-text">SPOILER</span> 
      <% end %> 
      </div> 
      <p><%= review.body %></p> 
      <button class="pull-right">Respond</button> 
     </div> 
     <% end %> 
     <% end %> 
    </div> 
<% end %> 

</div> 

ブックコントローラ

def show 
    @user = current_user 
    @reviews = Review.all  
    end 

    private 

    def book_params 
    params.require(:book).permit(:title, :author, :genre, :image, :publication_date, :publisher, :synopsis) 
    end 

    def current_book 
    @book = Book.find_by_id(params[:id]) 
    end 

    def find_reviews 
    puts "LOOK HERE!!!!!!" 
    @reviews.each do |review| 
     if review.book_id.to_s == params[:id].to_s 
     puts review.spoiler 
     end 
    end 
    @show_the_reviews = true 
    redirect_to book_path(@book.id) 
    end 

end 

私はそれをすべて表示]をクリックし、それはホームページにリダイレクトされます!

この質問はよく書かれていませんが、漠然としていますが、私は非常に迷惑で、より良い書き方を理解することはできません。私はここで基本戦略を探していると思う。

+0

なぜあなたはjavascriptを使用できませんか?レールビューでjavascriptを使用することができます。 – toddmetheny

+0

質問を編集する必要があります。私たちはあなたがそれがあまり書かれていない/あいまいであることを認め、それを修正しようと努力しているわけではないことは無礼です。誰もが読むことは、あなたを助けるためにそれを突き抜けなければなりません。 javascriptやJqueryでボタンを表示/非表示にして、それをレールで実装できます。あなたの問題はターボリンクである可能性があります。その場合は、レールターボリンクガイドの最後のセクションをお読みください。 – user3456978

+0

toddmetheny - 私はjsを試したときに、その属性がレビューモデルの項目であるため、レビューがスポイラーであるかどうかを特定する方法を見つけられませんでした – nwimmer123

答えて

2

あなたは次に$('.spoiler')$('.spoiler-free')ため表示/非表示を切り替えるとなりますビューの上部にいくつかの<script>を置くだけ。..レビューに

<% review_class = review.spoiler == true ? ' spoiler' : ' spoiler-free' %> 
<div class="review <%= review_class%>"> 

を適切なクラスを与え、jQueryを使って簡単にそれを行うことができますあなたのボタンonclickはjs関数を呼び出します。

送信ボタンでフィールドレスフォームを作成し、呼び出されたボタンのテキストを持つ呼び出されたアクションテストparams[:commit]で条件付きロジックでフィルタリングすることで純粋なレールで行うことができますスポイラーレビュー、非スポイラーレビュー、またはその両方を取得するかどうかを判断します。しかし、jQueryはもっと敏感です。

+0

Thanks Steve、jsを使用する際の主な困惑は、私はそれをモデルの属性、スポイラーなどで識別していたので、アイテムはスポイラーであるかどうかはわかりませんでした。そして、jQueryを使用してデータベースオブジェクトの属性をチェックする方法を理解していませんでした。私はそれを動作させることができるかどうかを試してみてください。 – nwimmer123

+0

はい、データベース属性を使用してdivを解決する必要があるdivにクラスを追加します(私の答えが示すように)。乾杯スティーブ – SteveTurczyn

+0

それは働いている!もう一度Steveに感謝します。 – nwimmer123

関連する問題