Rails link_to参数指示控制器中的控制流

时间:2013-04-06 07:36:50

标签: ruby-on-rails routes link-to

所以我一直在努力想要了解我可以用Rails中的link_to做些什么。我发现的一些东西是旧的,有些是新的,有些是与我所拥有的非常不同。具体来说,我试图在视图中有两个链接。一个是“加1”,一个是“减1”。当我到达控制器时,我想根据使用的链接从我的模型中添加或减去一个。以下是链接:

<%= link_to "Add 1", item, method: :put, title: item.name %>
<%= link_to "Minus 1", item, method: :put, title: item.name %>

我的控制器(项目控制器)方法是:

def update
    @item = current_user.item.find(params[:id])
    @item.quantity += #+1 or -1 depending on what is passed
    if @item.save
        flash[:success] = "Item updated."
    end
    redirect_to current_user
end

因为我用一个来调用link_to:put我不太清楚如何区分哪个:put是哪个,因为两个链接除链接名称外都是相同的。我想我正在使用title: item.name参数识别特定项目。是仅通过item路径识别出来的吗?我应该将“:title”更改为“+1”还是“-1”?我真的很感激澄清,因为这让我感到困惑。我还注意到在文档“html options”vs“url options”中,但我无法破译这些差异?谢谢!

1 个答案:

答案 0 :(得分:2)

您可以在网址中传递其他参数:

<%= link_to "Add 1", item_path(item, perform: 'add'), method: :put %>
<%= link_to "Sub 1", item_path(item, perform: 'sub'), method: :put %>

def update
    @item = current_user.item.find(params[:id])
    params[:perform] == 'sub' ? @item.quantity -= 1 : @item.quantity += 1 
    if @item.save
        flash[:success] = "Item updated."
    end
    redirect_to current_user
end

或者可以向item resource添加成员操作:

resources :items do
  member do
    put 'sub'
    put 'add'
  end
end


link_to "Add 1", [:add, item], method: :put
link_to "Sub 1", [:sub, item], method: :put