2014-02-22 119 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 
     } 
     }); 
});