最喜欢的功能Ruby on Rails的(Favourite functionality Ruby

2019-11-02 23:10发布

我需要将功能添加到我的项目,但我只用Ruby on Rails的约2周,我有种丢失。 现在的问题是:

我需要添加控制器“toogle_favourite”,已经与“轨生成器toogle_favourite”使它

现在我需要一个操作添加到控制器“toogle_favourite”修改该领域的“最爱”的值(最喜欢的是一个布尔字段我用脚手架之前进行)。

此外,我的应用程序需要实现另一页,其中收藏夹会显示我每次添加一个项目作为一个最喜欢的时间。 让我们来看看它是如何工作的一个例子:

1)我的应用程序的index.html显示我,我可以任意设置为喜爱的物品清单(有一个按钮)。

2)当我标记1元的喜爱,它的模型的布尔字段变成“TRUE”,所以这是一个最喜欢的。

3)渲染另一个页面列出所有喜爱的元素。

Answer 1:

下面的代码给出选择复选框的用户,谁可以从选择检查他们的收藏列表。 一旦用户满意他们的选择(即收藏夹),他们可以点击提交按钮,以及一个新的页面会出现显示只包含他们选择了最爱的过滤列表。

如果您想提示与HTML,检查出的代码为我的应用程序Trendmyhunch (共享我的GitHub的帐户 )。

第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


Answer 2:

我相信你应该标注一些类最喜欢的按钮。 然后只需粘贴类似的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
        }
      });
});


文章来源: Favourite functionality Ruby on Rails