2011-12-28 132 views
1

我的要求是在我的rails應用程序中實現自動完成功能。我需要將我的控制器代碼中的@testers轉換爲json格式。在rails中將數據轉換爲json格式

def new 
    @release = Release.new 
    @ic_ids = params[:ic_ids] ? params[:ic_ids] : [] 
    @testers = User.find_by_sql("select * from users where id in(select user_id from user_role_assignments where role_id in (select id from roles where name like 'Tester')) order by name").paginate(:page=>params[:page],:per_page=>30) 
    respond_to do |format| 
    format.html # new.html.erb 
    format.xml { render :xml => @release } 
    end 
end 

在我看來代碼我想這:

%td.grid.full_panels 
    -table_panel "Assign Testers" do 
     %table 
     %th Name 
     -puts "testers=#{@testers}" 
     = form.label :tester_tokens, "Testers" 
     = form.text_field :tester_tokens,:class => 'autocomplete' 
:javascript 
    data = #{testers.to_json} 

我收到未定義的數據。

請幫我看看這裏。

謝謝, Ramya。如果你不想提取所有數據onlyexcept可供選擇

def index 
    @objects=Model.where("name LIKE ?", "%params[:q]%") || Model.all 
    respond_to do |format| 
      format.html # index.html.erb 
      format.json { render :json => @objects.map(&:attributes) } 
    end 
end 

回答

3

要創建一個JSON源可以添加format.json到respond_to代碼迴路liek這一點。你應該能夠使用這個最自動完成的插件!

通過添加q數據,您將能夠按給定模式劃分結果。

+0

大衛你好,非常感謝您抽出時間來回答我。在我的情況下,@testers已經從不同的表格中提取出一個sql query.so請幫助我如何以上述格式使用它。還幫助如何在.js文件中使用這個? – ramya 2011-12-28 09:57:27

+0

也請讓我知道在哪裏可以傳遞「q」參數 – ramya 2011-12-28 10:11:33

+1

您還可以渲染任何其他數據,只需使用應該使用json呈現的任何其他對象數組來回報@objects。如果你只是簡單地提取這些東西,而沒有可能過濾'q'不需要! – davidb 2011-12-28 13:59:11

1

爲什麼data =?據我所知,這是無效的JavaScript。

正確HAML語法是:

:javascript 
    #{testers.to_json} 
+0

嗨berkes,謝謝很多回答我。請幫助我如何在我的js腳本中使用傳入的json – ramya 2011-12-28 09:54:08

+0

在您的代碼中,您嘗試直接在HTML中打印json;但由於錯誤的HAML而未能這樣做。我的回答只是一個解決你想要達到的目標。看來你正在嘗試其他的東西。請用更高層次的目標更新你的答案:你想達到什麼目的。而不是關於你得到的某個錯誤的詳細問題。 – berkes 2011-12-28 09:59:24

+0

我不想打印json.I試圖將轉換後的json傳遞給.js文件 – ramya 2011-12-28 10:02:52