最喜欢的功能Ruby on Rails

时间:2014-02-22 11:36:09

标签: jquery ruby-on-rails ruby ruby-on-rails-3 jquery-mobile

我需要为我的项目添加功能,但我只使用Ruby on Rails大约2周,我有点迷茫。问题如下:

我需要添加一个“toogle_favourite”控制器,已经使用“rails generate controller toogle_favourite”

现在我需要向控制器“toogle_favourite”添加一个操作,修改“收藏夹”字段的值(最喜欢的是我之前使用脚手架制作的布尔字段)。

此外,我的应用程序需要实现另一个页面,每次我添加一个项目作为收藏时,将显示收藏夹。让我们看一下它如何工作的一个例子:

1)我的应用程序的index.html显示了一个项目列表,我可以选择将其设置为收藏夹(有一个按钮)。

2)只要我将1个元素标记为收藏,其模型的布尔字段就会变为“TRUE”,因此它是最受欢迎的。

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

2 个答案:

答案 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