0

因此,我一直在努力尝试准确了解我可以在 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

由于我使用 :put 调用 link_to 我不太确定如何区分哪个 :put 是哪个,因为除了链接名称之外,两个链接都是相同的。我想我正在用title: item.name参数识别特定项目。是否仅通过item路径识别?我应该把“:title”改成“+1”还是“-1”?我真的很感激澄清,因为这让我很困惑。我还在文档中注意到“html 选项”与“url 选项”,但我无法解读差异?谢谢!

4

1 回答 1

2

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

<%= 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
于 2013-04-06T07:44:54.090 回答