Rails辅助方法问题

时间:2012-11-13 17:51:03

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

我是rails的新手,我认为这是一个非常简单的问题。

我有一个“任务”列表。当您单击某个任务时,我想更新其在数据库中的行以将其标记为完成(将“状态”列从0更改为1)。

以下是我的视图中的链接:

<td><%= link_to t.name, change_task_status_path(:id => t.id) %>

以下是我的tasks_controller.rb中的内容:

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>

修改 rake路线显示:

       tasks GET    /tasks(.:format)             tasks#index
             POST   /tasks(.:format)             tasks#create
    new_task GET    /tasks/new(.:format)         tasks#new
   edit_task GET    /tasks/:id/edit(.:format)    tasks#edit
        task GET    /tasks/:id(.:format)         tasks#show
             PUT    /tasks/:id(.:format)         tasks#update
             DELETE /tasks/:id(.:format)         tasks#destroy
      phases GET    /phases(.:format)            phases#index
             POST   /phases(.:format)            phases#create
   new_phase GET    /phases/new(.:format)        phases#new
  edit_phase GET    /phases/:id/edit(.:format)   phases#edit
       phase GET    /phases/:id(.:format)        phases#show
             PUT    /phases/:id(.:format)        phases#update
             DELETE /phases/:id(.:format)        phases#destroy
    projects GET    /projects(.:format)          projects#index
             POST   /projects(.:format)          projects#create
 new_project GET    /projects/new(.:format)      projects#new
edit_project GET    /projects/:id/edit(.:format) projects#edit
     project GET    /projects/:id(.:format)      projects#show
             PUT    /projects/:id(.:format)      projects#update
             DELETE /projects/:id(.:format)      projects#destroy

1 个答案:

答案 0 :(得分:1)

将此信息放入您的routes.rb:

resources :tasks do
  member do
    get :change
  end
end

它将添加传递任务ID的辅助路径change_task 并将您的链接更改为:

<td><%= link_to t.name, change_task_path(:id => t.id) %>

控制器:

def change

编辑:

要使其成为ajax调用,您做对了,将:remote => true添加到您的链接中,如下所示:

<%= link_to t.name, change_task_path(:id => t.id), :remote => true %>    

这样,您的控制器上的响应应该是js格式。

def change
  # do your thing
  respond_to do |format|
    format.js
  end
end

执行此操作时,您应该在视图文件夹中有一个change.js.erb文件,该文件会对页面进行所有更改。像这样:

$('#tasks_list').children().remove();
$('#tasks_list').html(
"<%= j(render('tasks_list')) %>"
);

请记住,如果您以这种方式执行操作,则需要部分(_tasks_list.html.erb)。