0

我正在尝试为 Rails 4 中的 oEmbed 创建一个提供程序创建了路由、控制器和操作。

但我无法使用 oembed 所需的参数(例如类型、版本、html、...)创建对象

我试图这样做:

class ServicesController < ApplicationController

    def oembed
        # get project ID
        url = params[:url].split("/")
        project_id = url[4]

        @project = Project.find(project_id)
        html = render_to_string :partial => "projects/oembed", :formats => [:html], :locals => { :project => @

        # here's the problem:
        oembed_response["type"] = "rich"
        oembed_response["version"] = "1.0"
        oembed_response["title"] = @project.name
        oembed_response["html"] = html

        respond_to do | format |
            if(@project)
                format.html { render :text => "Test" }
                format.json { render json: oembed_response, status: :ok }
                format.xml { render xml: oembed_response, status: :ok }
            else
                # error
            end
        end
    end
end

我总是收到以下错误:

NameError(未定义的局部变量或方法oembed_response' for #<ServicesController:0x007f9a8be579a0>): app/controllers/services_controller.rb:11:inoembed'

我怎样才能实现创建具有所需属性的自定义对象而没有模型和(强)参数,就像通常所做的那样?

我错过了什么吗?

提前致谢!

问候,

克里斯

4

1 回答 1

3

首先初始化oembed_response为空哈希:

oembed_response = {}

与此错误无关,但您应该更改从 id 获取对象 url 的方式。路由应该自动为您解析 id,例如。当你在routes.rb文件中有这个时:

get "/projects/oembed/:id" => 'services#oembed'

:id然后您可以从 params 哈希中直接访问 id(在路由路径中给出):

project_id = params[:id]
于 2014-06-01T21:51:12.930 回答