我需要将功能添加到我的项目,但我只用Ruby on Rails的约2周,我有种丢失。 现在的问题是:
我需要添加控制器“toogle_favourite”,已经与“轨生成器toogle_favourite”使它
现在我需要一个操作添加到控制器“toogle_favourite”修改该领域的“最爱”的值(最喜欢的是一个布尔字段我用脚手架之前进行)。
此外,我的应用程序需要实现另一页,其中收藏夹会显示我每次添加一个项目作为一个最喜欢的时间。 让我们来看看它是如何工作的一个例子:
1)我的应用程序的index.html显示我,我可以任意设置为喜爱的物品清单(有一个按钮)。
2)当我标记1元的喜爱,它的模型的布尔字段变成“TRUE”,所以这是一个最喜欢的。
3)渲染另一个页面列出所有喜爱的元素。
下面的代码给出选择复选框的用户,谁可以从选择检查他们的收藏列表。 一旦用户满意他们的选择(即收藏夹),他们可以点击提交按钮,以及一个新的页面会出现显示只包含他们选择了最爱的过滤列表。
如果您想提示与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
我相信你应该标注一些类最喜欢的按钮。 然后只需粘贴类似的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
}
});
});