2016-05-22 5 views
0

現在、Railsアプリケーションで簡単な検索機能を使用しています。私はVue.jsを使用していますので、RailsのJSON Builderを使用してすべてをフロントエンドに提供しています。検索のために私はように、コントローラとモデルのセットアップを持っている:json with railsで検索結果を送信

コントローラ:

def index 
    if params[:search] 
    @strains = Strain.search(params[:search]).order("created_at DESC") 
    else 
    @strains = Strain.all.order("created_at DESC") 
    end 
    respond_to do |format| 
    format.html 
    format.json { render :json => @strains } 
    end 
end 

モデル:

def self.search(search) 
    where('title LIKE ?', '%#{search}%') 
    end 

ビュー:

<%= form_tag(strains_path, :method => "get") do %> 
    <%= text_field_tag :search, params[:search], placeholder: "Search Strains" %> 
    <%= submit_tag "Search", :name => nil %> 
<% end %> 

I型検索では、URLのparamsを更新しますが、ページの出力には何も起こりません。私はそれがJSONと関係があると思っています。これは、Vueコンポーネントの中の私の準備ができた機能です。

ready: function() { 
    var that; 
    that = this; 
    $.ajax({ 
     url: '/strains.json', 
     success: function(res){ 
     that.strains = res; 
     } 
    }); 
    } 

ログを見ていますが、JSONではなくHTMLを検索するようです。ここで

はログです:

Started GET "/strains.json" for ::1 at 2016-05-23 21:40:32 -0400 
Processing by StrainsController#index as JSON 
    Strain Load (0.2ms) SELECT "strains".* FROM "strains" ORDER BY created_at DESC 
Completed 200 OK in 2ms (Views: 1.8ms | ActiveRecord: 0.2ms) 


Started GET "/strains?utf8=%E2%9C%93&search=Test" for ::1 at 2016-05-23 21:41:07 -0400 
Processing by StrainsController#index as HTML 
    Parameters: {"utf8"=>"✓", "search"=>"Test"} 
    Strain Load (0.2ms) SELECT "strains".* FROM "strains" WHERE (title LIKE '%Test%') ORDER BY created_at DESC 
    Rendered strains/index.html.erb within layouts/application (1.5ms) 
Completed 200 OK in 17ms (Views: 16.3ms | ActiveRecord: 0.2ms) 


Started GET "/strains.json" for ::1 at 2016-05-23 21:41:07 -0400 
Processing by StrainsController#index as JSON 
    Strain Load (0.1ms) SELECT "strains".* FROM "strains" ORDER BY created_at DESC 
Completed 200 OK in 2ms (Views: 1.4ms | ActiveRecord: 0.1ms) 

答えて

0

それはあなたの主な問題であるならば、私はよく分からないが、それは句は、このようにその変数を拾っていない、単一引用符を使用しているあなたの場所を探します。ルビ文字列補間を使用する場合は、二重引用符を使用する必要があります。

irb(main):006:0> foo = 5 
=> 5 
irb(main):007:0> 'this is my number #{foo}' 
=> "this is my number \#{foo}" 
irb(main):008:0> "this is my number #{foo}" 
=> "this is my number 5" 

だからあなたがしたい:

def self.search(search) 
    where('title LIKE ?', "%#{search}%") 
    end 
+0

固定されています。しかし、私は問題がコントローラーのjsonをレンダリングしていると思います。 – Dileet

0

あなたは戻り値をJSONデータを期待するdataTypeオプションを設定する必要があります。あなたは次のようにすることができます:

$.ajax({ 
    url: '/strains.json', 
    dataType: 'json', 
    success: function(res){ 
    that.strains = res; 
    } 
}); 
+0

if文の中にformat.json {render formats:[:json]}を入れますか? – Dileet

+0

@Dileet答えから 'format.json'を削除しました。あなたの質問をもう一度読んだら、あなたが持っているものは大丈夫です。 'dataType'をAjax呼び出しに追加すると、そのトリックを行うのに十分なはずです。 –

+0

それでも検索結果でテーブルを更新することはありません。これはurlですhttp:// localhost:3000/strains?utf8 =%E2%9C%93&search = Test – Dileet

関連する問題