【问题标题】:routing with non rest actions非休息动作的路由
【发布时间】:2013-03-16 22:24:15
【问题描述】:

我在控制器中为我的非 restfull 操作创建路由时遇到了一些问题,这是我的代码:

控制器:

class StoresController < ApplicationController

  def toggle_store
    @store=Store.find(params[:store])
    if @store.available==true
      @store.update_attribute(:available, false)
    else
      @store.update_attribute(:available, true)
    end
    redirect_to @store
  end

end

路线:

  resources :groups do
    resources :stores do
      member do
        post :toggle_store
      end
    end
  end

但是当我在链接中使用路径时,我得到了这个网址:http://example.com/groups/1/stores/toggle_store.2

我需要这样的东西: http://example.com/groups/1/stores/2/toggle_store

有什么想法吗?

谢谢

编辑:

耙路线:

toggle_store_group_store POST   /groups/:group_id/stores/:id/toggle_store(.:format) stores#toggle_store

链接:

<%=link_to "toggle", toggle_store_group_stores_path(@group,store), :method => :post %>

【问题讨论】:

  • 你是如何创建你的路径的?也请复制rake routes的部分输出。
  • 完成,我添加了 rake 路由以及我如何链接它

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


【解决方案1】:

好的,我是这样解决的:

routes.rb:

  resources :groups do
    resources :stores do
      post :toggle_store      
    end
  end

控制器:

  def toggle_store
    authorize! :toggle, :store
    @store=Store.find(params[:store_id])
    if @store.available==true
      @store.update_attribute(:available, false)
    else
      @store.update_attribute(:available, true)
    end
    redirect_to @group
  end

链接:

<%=link_to "to", toggle_store_group_store_path(@group,store), :method => :post %>

【讨论】:

  • 好的,很高兴你解决了它,但不知道你的问题是什么,因为在我的机器上一切正常。请注意:您不应该将:method =&gt; :postlink_to 方法一起使用,因为当用户在新选项卡/窗口中打开此链接时,方法属性会丢失并且链接作为获取请求发送。考虑使用button_to 或其他东西。
  • 顺便说一句,有一个切换!切换和存储属性的方法:@store.toggle!(:available)。至少你应该用类似的东西摆脱 if:@store.update_attribute(:available, !@store.available)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-31
  • 2014-02-02
相关资源
最近更新 更多