【问题标题】:rails assign variable only when it's ajax request or vice versa只有当它是ajax请求时,rails才分配变量,反之亦然
【发布时间】:2017-03-22 14:55:21
【问题描述】:

我是 Rails 新手,我正在尝试实现一个无穷无尽的页面。 对于控制器索引,我有:

    def index
        @messages = @conversation.messages.order('created_at DESC')
                         .paginate(page: params[:page],
                                   per_page: 8)
        @match = @conversation.match
        @bid = @conversation.bid unless @conversation.bid.nil?
        @table = @match.table unless @match.nil?
        read_message
        get_participant
    end

然后,当我单击“加载更多消息”按钮时,它会触发 ajax 请求以获取下一页的消息。但这次我不再需要@bid、@table 变量了。但是每次它到达我的控制器时,它都会再次访问数据库。

所以我的问题是,只有当它是一个 ajax 请求时,有没有办法分配某些变量?或相反亦然?

谢谢

【问题讨论】:

    标签: ruby-on-rails ajax pagination


    【解决方案1】:

    当您发送 AJAX 请求时,您可以发送一个自定义标头,其中包含您想要的任何值。因此,发送类似X-IS-AJAX-REQUEST 的标头,其值为true。这样,您可以在 Rails 中获取该标头的值,并使用条件仅设置需要设置的变量。像这样的东西可以工作:

    def index
        @messages = @conversation.messages.order('created_at DESC')
                         .paginate(page: params[:page],
                                   per_page: 8)
        @match = @conversation.match
        unless request.headers['X-IS-AJAX-REQUEST'] then
           @bid = @conversation.bid unless @conversation.bid.nil?
           @table = @match.table unless @match.nil?
        end
        read_message
        get_participant
    end
    

    【讨论】:

    • 我最终使用了 if request.xhr? rails 中的内置快捷方式
    猜你喜欢
    • 1970-01-01
    • 2015-09-13
    • 2019-11-09
    • 2013-10-07
    • 2012-12-06
    • 1970-01-01
    • 2012-12-19
    • 2017-02-05
    • 1970-01-01
    相关资源
    最近更新 更多