ユーザーがトリガーする (jquery クリック) ajax 呼び出しを作成して、余分なデータをロードして Web ページを埋めます。html を作成する正しい方法は何ですか: rails コントローラー内で html を生成し、html データを返すだけですか、それとも返す必要がありますか? JSONとajax関数で構築しますか? または、レールで ajax 呼び出しを行うためのより良い方法はありますか?
現時点でのcountries.html.hamlコードは次のとおりです(コントローラーで生成されたhtmlデータ):
$('#tab li').click( function(){
$('#tab li').removeClass('active');
$(this).addClass('active');
var first_l = $(this).attr("id")
$.ajax({
url: "/countries/get_flags",
type: "GET",
data: {first_letter: first_l},
complete: function() {
// called when complete
},
success: function(data) {
// called when succesful
$('#countries_container').html("");
$('#countries_container').append(data);
},
error: function(xhr,status,error) {
// called when error
}
});
});
そしてコントローラー:
def get_flags
@html = ""
@fetched_countries = Country.all( :conditions => "name like '#{params[:first_letter]}%'")
i = 1
@html = "<div class='row country-row'>"
@fetched_countries.each do |country|
if i % 5 == 0
@html += "<div class='row country-row'>"
i = 1
end
@html += "<div class='span3 '>"
@html += "<div class='country-name'>#{country.name}</div>"
@html += "<div class='country-image thumbnail'><img alt='#{country.id.to_s}' src='/assets/countries/x100/#{country.id.to_s}.png' /></div></div>"
if i % 4 == 0
@html += "</div>"
end
i = i + 1
end
render :text => @html
end