2017-03-24 6 views
0

私は複数の列を持つテーブルを持っています。 1つはブール値です。私は私のコントローラでこれを持っている:「0」の値を持つ通常のラインは重要ではありませんので、「どこで」Railsでインデックスビューを切り替える方法

def index 
    @matchings = Matching.where(match: '1') 
end 

は、私が唯一の「一致」列の1の対応する値を持つ行を持っていると思います。しかし、コントローラに入り、毎回def indexを編集しなくても、表示を切り替える方法があるかどうかは疑問です。

アイデア?

+0

あなたが求めていることは明確ではありません。 「ビューを切り替える」とはどういう意味ですか?そして、「毎回def indexを編集する」というのはどういう意味ですか? – moveson

+0

申し訳ありませんが、正確には十分ではありません。私は私のビュー/ matchigs/index.html.erbに "toggle"ボタンを追加したいと考えています。そして、私がしたいことは、 'match'カラムで0または1をフィルタリングすることです。私は私のテーブルの検索エンジンでこれを行うことができますが、私はビューを切り替えるボタンを好む。 – Krawalla

答えて

1

あなただけ手動で切り替えたい場合は、ちょうどあなたがあなたの視野からそれを追加したい場合は、このような形を作ることができ

localhost:3000/controllername/index?match=0 

または

localhost:3000/controllername/index?match=1 

を入力することができます

<form class="smart-form"> 
    <fieldset> 
     <section class="col col-3"> 
      <label class="label font-sm">Toggle view</label> 
       <select class="form-control input-sm" name= "match"> 
        <option value="0">View 1</option> 
        <option value="1">View 2</option> 
       </select><i></i> 
     </section> 
    </fieldset> 
    <footer> 
     <button type="submit" class="btn btn-primary">Submit</button> 
    </footer> 
</form> 

とあなたのコントローラタイプで、次の

def index 
    @matchings = Matching.where(:match => params[:match]) 
end 

私はあなたのモデルで何かが定義されていると仮定します。 ありがとうございました

1

クエリ文字列を使用してください。あなたは

match: '0' 

とそれをいつでも要求に

?match=1 

を追加し、

match: '1' 

でそれをロードするたび要求に

?match=0 

を追加します。例:次に

/some/index/page?match=1 

または

/some/index/page?match=0. 

コントローラの使用中:

def index 
    @matchings = Matching.where(match: match) 
end 

private 

def match 
    params.require(:match) # reads the value of the `match` param in the query string 
end 

何が価値があるのに対して、あなたはブール値の列を作成するために、移行を書くことができます。 (ほとんどのSQLデータベースのTINYINT。)それを使用するには、クエリは、この目的のためにもう少し理にかなって

Matching.where(match: true||false) 

に変更することができます。

また、"match"という列名は使用しないでください。 matchは頻繁に使用されるRubyメソッドです。そのような一般的なメソッド名の使用を避けるのが最善です。

関連する問題