我需要为我的项目添加功能,但我只使用Ruby on Rails大约2周,我有点迷茫。问题如下:
我需要添加一个“toogle_favourite”控制器,已经使用“rails generate controller toogle_favourite”
现在我需要向控制器“toogle_favourite”添加一个操作,修改“收藏夹”字段的值(最喜欢的是我之前使用脚手架制作的布尔字段)。
此外,我的应用程序需要实现另一个页面,每次我添加一个项目作为收藏时,将显示收藏夹。让我们看一下它如何工作的一个例子:
1)我的应用程序的index.html显示了一个项目列表,我可以选择将其设置为收藏夹(有一个按钮)。
2)只要我将1个元素标记为收藏,其模型的布尔字段就会变为“TRUE”,因此它是最受欢迎的。
3)渲染另一个列出所有喜爱元素的页面。
答案 0 :(得分:0)
我相信你应该用一些CLASS标记那个最喜欢的按钮。然后只需粘贴application.js中的内容:
$( ".your_class" ).on('change', function() {
var item_id = $(this).data('item');
var favourite = $(this).val();
$.ajax({
dataType: 'json',
url: /toogle_favourite/+item_id+'/toogle_favourite',
data: { favourite: favourite },
type: "POST",
success: function(r) {
// Here you should refresh item or do something
}
});
});
答案 1 :(得分:0)
下面的代码为用户提供了一个选择复选框列表,用户可以从选择中检查他们的收藏夹。一旦用户对他们的选择(即收藏)感到满意,他们可以点击提交按钮,并且将出现新页面,其显示仅包含他们选择的收藏的过滤列表。
如果您想了解HTML提示,请查看我的应用Trendmyhunch的代码(在my GitHub account上分享)。
第1步:将index.html文件更改为index.erb:
第2步:将以下嵌入式Ruby添加到index.erb文件(视图)以及您自己的自定义HTML中:
<h2>Select Favourites:</h2>
<%= form_tag '/favourites#form', :name => 'form1', :method => 'get' do %> # http get request
<% @favs.each do |fav| %>
<%= fav.name, params[:fav_name] %> # create original list from data source
<% end %>
<% @favs.each do |fav| %>
<%= label_tag :filter, "" %>
<%= check_box_tag 'filter_values[]', fav.id, false %> # array of checkbox values
<%#= check_box(:accepted, 'false', selected:false) %>
<%= hidden_field_tag 'favourites_ids[]', fav.id %> # hidden array of values accessible across pages
<% end %>
<% end %>
<h2>Choose Next Action:</h2>
<%= form_tag '/favourites/show', :method => 'post' do %>
<% @favs.each do |fav| %> # same as previous hidden array allowing access to checkbox values
<%= hidden_field_tag 'favourites_ids[]', fav.id %> //
<% end %>
<% end %>
<%= submit_tag("Set Favourite", data: { disable_with: "Please wait.." }, class: "btn btn-primary") %><span class="help-block">Please press this button after selecting the items you wish to set as favourites.</span>
第3步:将以下嵌入式Ruby添加到show.erb文件(视图)以及您自己的自定义HTML中:
<h2>Show Favourites:</h2>
<% @favs.each do |fav| %> # list the names of the checkboxes that were checked as favourites
<%= fav.name %>
<% end %>
第4步:将以下内容添加到您的toogle_favourite.rb文件(控制器)中:
class ToogleFavouriteController < ApplicationController
def index
if params[:filter_values].present?
@favs = Favourite.where(:id => params[:filter_values]) # assign to a variable only the database id's of favourites that are selected as favourites in the list of checkboxes
@favs.toggle = true
elsif !params[:filter_values].present?
@favs = Favourite.all
end
end
def show
@favs = Favourite.where(:id => params[:favs_ids])
end
end