我目前在我的复选框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
答案 0 :(得分:1)
首先,您需要配置为patch '/todos/:id'
的路线。
如果您已经拥有,请将操作名称放在url_for
参数中,例如:
url_for(controller: :todos, action: :something, id: todo.id)
如果你没有那个动作,你必须创建它。
url_for
正在返回/todos?id=f483e4a8cb1a728f
,因为它将index
操作视为默认操作,并且由于此路径在路径中没有:id
参数, helper把它作为参数(查询字符串)。