代码之家  ›  专栏  ›  技术社区  ›  Neil Middleton

如何最好地通过API公开Rails方法?

  •  2
  • Neil Middleton  · 技术社区  · 16 年前

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

    现在,rails方法建议我在休息时公开我的模型,让最终用户使用参数。

    如果我想公开我的出版物该怎么办!方法来保护我的模型?这是最好的方法吗?

    2 回复  |  直到 16 年前
        1
  •  4
  •   Milan Novota    16 年前

    因为您试图用休息的方式来完成这项工作,所以首先需要做的是找到一个资源—您可以使用其中一个HTTP谓词进行查询。

    我想说的是,我们需要确认的是 FO的地位 .转换为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
    

    这样,你最终会得到一个相当体面的休息设计。

        2
  •  0
  •   Steve Klabnik    16 年前

    您将向foocontroller添加一个方法,该方法调用 publish! 方法。

    例子:

    在config/routes.rb中:

    map.publish_foo "/foos/:id/publish/:bar", :controller => "foo", :action => "publish"
    

    应用程序内/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
    

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