checkbox_tag rails 4

时间:2016-04-30 18:36:23

标签: ruby-on-rails friendly-id

我目前在我的复选框data-url“/ todos?id = f483e4a8cb1a728f”中得到这个,当它应该只是“/ todos / f483e4a8cb1a728f”我正在使用随机slugs的友好id。

目前我将其称为数据:{remote:true,url:url_for(controller :: todos,id:todo),方法:“PATCH”} id:todo我尝试了todo.id但是这给了我不想要的帖子数量 - 我想要slu ..

有谁知道我怎么能解决这个问题?

谢谢你,先生。

编辑:需要更多上下文

<%= check_box_tag 'todo[completed]', todo.id, todo.completed, data: { remote: true, url: url_for(controller: :todos, id: todo), method: "PATCH" }, id: todo.id %>
<%= label_tag todo.id, "COMPLETE", :class => 'strikethrough' %>

这就是我调用它的方式 - 因为我想在索引上完成我的todo而不是进入并更新todos /:id / edit。但是,当我点击复选框时,它会给我一个错误,因为当它应该只是“/ todos / f483e4a8cb1a728f”时,URL就像这样的“/ todos?id = f483e4a8cb1a728f”

编辑:

我的行动

def completed
    if @todo.update_attributes(:completed => params[:completed])
      flash[:success] = "Wowzers."
      redirect_to dashboard_path
    else
      flash.now[:error] = "Not so wowzers..."  
      render :new  
    end
  end

我的路线

resources :todos do
    member do
      # post 'completed'
      patch 'todos/:id' => 'todos#completed'
    end 
  end

1 个答案:

答案 0 :(得分:1)

首先,您需要配置为patch '/todos/:id'的路线。

如果您已经拥有,请将操作名称放在url_for参数中,例如:

url_for(controller: :todos, action: :something, id: todo.id)

如果你没有那个动作,你必须创建它。

url_for正在返回/todos?id=f483e4a8cb1a728f,因为它将index操作视为默认操作,并且由于此路径在路径中没有:id参数, helper把它作为参数(查询字符串)。