假设我有一个模型foo,我的模型有一个发布!该方法可以更改该模型上的一些属性,也可能改变其他一些属性。
现在,Rails方式表明我将模型暴露在休息状态,让最终用户使用参数。
如果我想曝光我的发布,我该怎么办?方法改为保护我的模型?这甚至是看这个的最佳方式吗?
答案 0 :(得分:4)
由于您尝试以REST方式执行此操作,因此您首先需要做的是查找资源 - 您可以使用其中一个HTTP谓词进行查询。
我要说我们需要识别的“事物”是foo的状态。翻译成URL:
/foos/:id/status
具体foo的状态是一种资源 - 这是我们在尝试兼容REST时首先需要的东西。当我们发布一些foo时,它意味着我们改变(更新)它的状态,对吧?所以,我们接下来需要做的是创建一个路径和一个方法来处理“foo的更新状态”请求。
要执行此操作,只需将其添加到routes.rb文件中:
map.connect "/foos/:id/status", :controller => "foos", :action => "change_status", :conditions => { :methods => :put }
并将这样的内容添加到您的foos控制器文件中:
# simplified
def change_status
status_name = params[:status_name]
foo = Foo.find(params[:id])
foo.publish! if status_name == "published"
end
通过这种方式,您将获得相当不错的RESTful设计。
答案 1 :(得分:0)
您将向FooController添加一个调用publish!
方法的方法。
示例:
在config / routes.rb中:
map.publish_foo "/foos/:id/publish/:bar", :controller => "foo", :action => "publish"
app / controllers / foo_controller.rb中的
def publish
@foo = Foo.find params[:id]
@foo.publish!(params[:bar])
flash[:notice] = "Your Foo has been published."
redirect_to @foo
end
当然,您可能需要一些错误处理。