Ruby on rails Rails助手方法问题
我是rails新手,我认为这是一个非常简单的问题 我有一个“任务”列表。当您单击某个任务时,我想更新其在数据库中的行,以将其标记为已完成(将“状态”列表单0更改为1) 以下是我眼中的链接:Ruby on rails Rails助手方法问题,ruby-on-rails,helper,link-to,Ruby On Rails,Helper,Link To,我是rails新手,我认为这是一个非常简单的问题 我有一个“任务”列表。当您单击某个任务时,我想更新其在数据库中的行,以将其标记为已完成(将“状态”列表单0更改为1) 以下是我眼中的链接: <td><%= link_to t.name, change_task_status_path(:id => t.id) %> def change_task_status @t = Task.find_by_id(params[:id]) @t.status = '1
<td><%= link_to t.name, change_task_status_path(:id => t.id) %>
def change_task_status
@t = Task.find_by_id(params[:id])
@t.status = '1' # 1 = complete
@t.save
render :nothing => true
end
我不知道如何正确设置链接的格式!加载视图时出现以下错误:
undefined method `change_task_status_path' for #<#<Class:0x3a6c144>:0x3a69d54>
把这个放在你的routes.rb中:
resources :tasks do
member do
get :change
end
end
它将添加助手路径change\u task
传递任务id。并将您的链接更改为:
<td><%= link_to t.name, change_task_path(:id => t.id) %>
编辑:
要使其成为一个ajax调用,请将:remote=>true
添加到链接中,如下所示:
<%= link_to t.name, change_task_path(:id => t.id), :remote => true %>
$('#tasks_list').children().remove();
$('#tasks_list').html(
"<%= j(render('tasks_list')) %>"
);
当您这样做时,您的views文件夹中会有一个change.js.erb
文件,用于对页面进行所有更改。大概是这样的:
<%= link_to t.name, change_task_path(:id => t.id), :remote => true %>
$('#tasks_list').children().remove();
$('#tasks_list').html(
"<%= j(render('tasks_list')) %>"
);
$(“#任务列表”).children().remove();
$('#任务列表').html(
""
);
请记住,如果您这样做,您将需要一个部分(
\u tasks\u list.html.erb
)。运行rake routes
,查看您的路由名称。我编辑我的问题以显示我的rake routes响应。路径似乎根本没有显示。请尝试查看此链接以获取更多信息:。添加控制器操作时,不会自动获得对其的访问权限。您必须在routes.rb文件中定义它。然后,根据您如何定义它,它将确定您的助手链接的外观。是的,将方法的名称更改为defchange
。我忘了,对不起你就是那个人!非常感谢。最后一个请求。有没有一种简单的方法可以让它成为在后台运行的ajax调用?我知道使用:remote=>true是有道理的,但我不确定链接格式中的内容。Perfecto!这就成功了。实际上,我省略了respond_to,因为我只需要在链接中添加一个类来显示它已被更改,这是我使用jquery onClick所做的。再次感谢!
$('#tasks_list').children().remove();
$('#tasks_list').html(
"<%= j(render('tasks_list')) %>"
);