Here是一个很好的起点,但我不确定如何从视图中调用这些方法,也不知道如何从视图中更新内容。这个想法是导航将按升序按日期,按日期降序,向上投票和向下投票进行排序。我正在使用该行为作为可投票的宝石 我对我的模型的最佳猜测是
#Message.rb
scope :recent, -> { order(created_at: :desc) }
scope :upvoted, -> { order(:cached_votes_up => :desc) }
scope :oldest, -> { order(created_at: :asc) }
def self.sort_by(sort_param)
case sort_param
when 'recent'
recent
when 'upvoted'
upvoted
when 'oldest'
oldest
else
all
end
end
我不知道如何调用此方法(可能来自索引),我也不知道如何使用AJAX来更新视图。
答案 0 :(得分:0)
你应该阅读指南
http://guides.rubyonrails.org/working_with_javascript_in_rails.html并更好地了解 AJAX
你打算怎么触发这个方法?用户会以某种方式点击按钮或链接吗?
这是如何将表单的提交按钮绑定到ajax操作
的示例http://guides.rubyonrails.org/working_with_javascript_in_rails.html#server-side-concerns
基本上form button submit
将执行users_controller#create
,create.js.erb
将在$("<%= escape_javascript(render @user) %>").appendTo("#users");
js.erb
正如您从此示例中看到的那样,优势在于,因为这是@user
文件,您可以使用变量#user
并将其附加到link
div
您可以搜索 rails ajax 以获取更多信息,您可以观看YouTube关于 AJAX 的视频,以便更好地理解
这个想法是 AJAX 代表异步javascript和xml请求,现在我们使用json而不是xml。客户端将发送请求,服务器将发送响应。信息通过 json 发送,客户端用作脚本语言 json
在你的情况下,我建议。确定触发button
的{{1}}或request
,然后按照指南设置rails ajax
,配置controller#action
以{{1}回复并创建js
文件,以便您可以重新排序页面上的信息。您可以使用js.erb
中重新排序的项目列表创建变量实例,然后将controller#action
附加list of items
html
答案 1 :(得分:0)
对我来说最简单的答案是 将范围添加到我的模型
#Message.rb
scope :recent, -> { order("created_at DESC") }
scope :oldest, -> { order(created_at: :asc) }
scope :upvoted, -> { order(:cached_votes_up => :desc) }
scope :downvoted, -> { order(:cached_votes_down => :desc) }
使用对索引的渲染操作定义控制器中的方法。
#messages_controller.rb
def recent
@messages = Message.recent
render action: :index
end
def oldest
@messages = Message.oldest
render action: :index
end
def upvoted
@messages = Message.upvoted
render action: :index
end
def downvoted
@messages = Message.downvoted
render action: :index
end
通过集合创建相应的路线。
collection do
get :recent
get :oldest
get :upvoted
get :downvoted
end
我的视线导航。
<ul class="nav nav-tabs card-header-tabs">
<li class="nav-item">
<%= link_to "Recent", recent_messages_path, class: "nav-link active" %>
</li>
<li class="nav-item">
<%= link_to "Oldest", oldest_messages_path, class: "nav-link active" %>
</li>
<li class="nav-item">
<%= link_to "Upvoted", upvoted_messages_path, class: "nav-link active" %>
</li>
<li class="nav-item">
<%= link_to "Downvoted", downvoted_messages_path, class: "nav-link active" %>
</li>
</ul>