如何通过API公开Rails方法?

时间:2009-11-13 14:27:25

标签: ruby-on-rails api

假设我有一个模型foo,我的模型有一个发布!该方法可以更改该模型上的一些属性,也可能改变其他一些属性。

现在,Rails方式表明我将模型暴露在休息状态,让最终用户使用参数。

如果我想曝光我的发布,我该怎么办?方法改为保护我的模型?这甚至是看这个的最佳方式吗?

2 个答案:

答案 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

当然,您可能需要一些错误处理。