如何让这个POST在rails中工作?

时间:2012-03-10 05:05:46

标签: ruby-on-rails ruby ajax ruby-on-rails-3 activerecord

我正在尝试在我的rails应用程序的前端有一个按钮,显示一个链接列表。我希望他们能够点击“添加到收藏夹”

现在我正在努力让它在没有AJAX的情况下工作,但最终我会在我得到后备工作时添加它(只是常规链接,对吧?..然后在js我使用返回false;然后使用ajax)

现在,我没有看到任何错误,但是当我点击它时它没有添加收藏。任何帮助将不胜感激

路线:

  root  :to => 'home#index'

  resources :resources, :except => [:index]
  resources :profiles,  :only   => [:show]
  resources :favorites, :only   => [:create, :destroy]

  match '/learn',    :to => 'pages#learn'
  match '/contact',  :to => 'pages#contact'
  match '/requests', :to => 'pages#requests'

收藏控制器

class FavoritesController < ApplicationController

  before_filter :authenticate_user!

  def create
    @favorite = Favorite.new(:resource_id => params[:id], :user_id => current_user.id)
    if @favorite.valid?
      @favorite.save
    else
      redirect_to root_url
    end
  end

  def destroy
    # also must find by user as well...
    @favorite = Favorite.find_by_resource_id(params[:id])
    @favorite.destroy
    redirect_to root_url
  end

end

继承我的观看代码,实际上显示了“添加收藏”链接:

<%= link_to favorites_path(resource), :method => :post, :class => "btn btn-warning btn-mini" do %>
  <i class="icon-star icon-white" rel="tooltip" title="add to favorites"></i> Add to favorites
<% end  %>

当我将鼠标悬停在它上面时,网址显示为site.com/favorites.3 ---不确定这是否正确?

2 个答案:

答案 0 :(得分:1)

我认为您可以使用表单来POST数据而不是使用GET的链接,或者添加此路由也可以这样做

match "/favorites/add/:id" => "favorites#create"

答案 1 :(得分:1)

默认情况下,创建操作会在rails中发布,因此不会更改默认行为,为您的目的添加新操作。

内部路线

resources :favorites, :only   => [:destroy] do
 get :add, :on => :collection 
end

查看*

<%= link_to add_favorites_path(:id => resource), :class => "btn btn-warning btn-mini" do %>
  <i class="icon-star icon-white" rel="tooltip" title="add to favorites"></i> Add to favorites
<% end  %>

控制器create操作会renamedadd