Rails:从控制器渲染新数据到视图?

时间:2013-07-28 20:41:53

标签: ruby-on-rails ajax jquery coffeescript

我有一个rails应用程序。当我点击一个按钮时,我希望它将一些新数据加载到我的控制器中的@posts中,并在页面上的渲染中显示。

在我看来,我有三个按钮:

    <div class="span6 offset3" id="user_post_area_button">
        <div id="type_group" class="btn-group" data-toggle="buttons-radio">
            <button class="radio_button" id="radio_button_zero" data-value="0">0</button>
            <button class="radio_button" id="radio_button_one" data-value="1">1</button>
            <button class="radio_button" id="radio_button_two" data-value="2">2</button>
        </div>
    </div>

当我点击其中一个时,我希望我的页面的某些部分可以更改。这是我想要更改的部分(我希望它使用新的@posts进行渲染):

<div class="render_post">
   <%= render 'pages/singlePost' %>
</div> 

我使用这个.js.coffee代码:

$ ->
  $("button.radio_button").click (e) ->
    e.preventDefault();
    list_status = $(this).data("value")
    if list_status == 0
      $("#radio_button_zero").addClass('active')
      $("#radio_button_one").removeClass('active')
      $("#radio_button_two").removeClass('active')
      $.post '/lelist/' + list_status
    else if list_status == 1
      $("#radio_button_zero").removeClass('active')
      $("#radio_button_one").addClass('active')
      $("#radio_button_two").removeClass('active')
      $.post '/lelist/' + list_status
    else if list_status == 2
      $("#radio_button_zero").removeClass('active')
      $("#radio_button_one").removeClass('active')
      $("#radio_button_two").addClass('active')
      $.post '/lelist/' + list_status

这是我的控制器:

class PagesController < ApplicationController
    def lelist
        if current_user && params[:list_status] == 0
          @posts = Post.where("created_at <= ? AND status = ?", Time.now, 0).order("created_at DESC").page(params[:page]).per_page(10)
        elsif current_user && params[:list_status] == 1
          @posts = Post.where("created_at <= ? AND status = ?", Time.now, 1).order("created_at DESC").page(params[:page]).per_page(10)
        elsif current_user && params[:list_status] == 2
          @posts = Post.where("created_at <= ? AND status = ?", Time.now, 2).order("created_at DESC").page(params[:page]).per_page(10)
        elsif !current_user || current_user
          @posts = Post.where("created_at <= ? AND status = ?", Time.now, 0).order("created_at DESC").page(params[:page]).per_page(10)
        end
    end
end

我无法弄清楚如何使这项工作。一些建议?

1 个答案:

答案 0 :(得分:0)

您需要使用的是AJAX调用

由于这是一个广泛的主题,我无法在这里开始解释它

你可以从这里开始阅读

http://edgeguides.rubyonrails.org/working_with_javascript_in_rails.html#an-introduction-to-ajax

这是更详细的手册

http://net.tutsplus.com/tutorials/javascript-ajax/using-unobtrusive-javascript-and-ajax-with-rails-3/

享受