0 ruby rest routes ruby-on-rails
我很难解决以RESTful方式完成任务的问题.我有一个"任务"控制器,还有一个"complete_tasks"控制器.
我在complete_tasks_controller创建操作中有这个:
def create
@task = Task.find(params[:id])
@task.completed_at = Time.now
@task.save
end
Run Code Online (Sandbox Code Playgroud)
我试着这样说:
<%=link_to "Complete task", new_task_complete_task_path(@task), :method => :post %>
Run Code Online (Sandbox Code Playgroud)
..但是我在提到"只允许获取,放置和删除请求"时遇到错误.
你知道我做错了什么吗?
将它移动到控制器中名为complete的动作会更有意义:
def complete
@task = Task.find(params[:id])
@task.complete!
end
Run Code Online (Sandbox Code Playgroud)
要使用RESTful路由访问此操作,您需要在config/routes.rb中定义这样的新成员路由:
map.resources :tasks, :member => { :complete => :put }
Run Code Online (Sandbox Code Playgroud)
添加:member => { :complete => :put }到任何预先存在的结尾map.resources :tasks也可以做到这一点,你应该只有map.resources :tasks一行,除非它是嵌套的.该路由指南解释了这个比我以往任何时候都能够更好地.
从视图中获取它:
link_to "Complete this task", complete_task_path(@task), :method => :put
Run Code Online (Sandbox Code Playgroud)
complete!然后在您的模型中定义该方法,如下所示:
def complete!
self.completed_at = Time.now
save!
end
Run Code Online (Sandbox Code Playgroud)
这样做的原因是它将模型逻辑放在它所属的位置:在模型中.
| 归档时间: |
|
| 查看次数: |
247 次 |
| 最近记录: |