2014-02-22 74 views
0

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

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

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

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

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

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

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

+1

你可能不应该使用一个特定的控制器,只为这一点。向代表你喜欢的东西的控制器添加一个'toggle_favourite'动作可能会更好。 –

+1

那么,你的问题是什么?遇到特定问题的麻烦,或只需要它为您编码? – Warlord

+0

也许你需要一个自由职业者 –

回答

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 
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 
     } 
     }); 
});