添加对`render`的调用后,渲染页面完全改变

时间:2016-01-27 10:41:06

标签: ruby-on-rails json

我目前在我的控制器中有这个;

  def get_response
    response = HTTParty.get('url')
    render json: response.to_json
  end

  def edit
    @newevent = Event.find(params[:id])
     json = get_response

    byebug
  end

现在当我进入编辑页面时,它只显示了json响应,这不是我想要的。

我希望通过编辑页面可以使用响应。所以我可以打电话回复。 ID(目前不工作,但就像我说的,我可以让json回来并显示,只是它删除了我的编辑页面,这不是我想要的,因为我希望json在编辑中使用页)

1 个答案:

答案 0 :(得分:0)

重读几次后,我想我明白了这个问题。

发生了什么

我觉得令人困惑的是Rails magic™,它非常方便,但是对于初学者来说,从使用Rails生成的代码到他们自己的版本并理解为什么会破坏它们的步骤变得非常困难。

edit那样空的控制器操作将执行隐式render <name-of-controller-action>。只要你自己编写一个实际的render,Rails就不会执行隐式render。所以你所做的实际上是“覆盖”Rails之一。产生您看到JSON渲染的结果,而不再是编辑页面。

如何解决

您要做的是在编辑视图中添加额外的内容(您首先从其他网页获取)。使用render在几个层面上是错误的方法。 (我建议重读Rails指南,因为我认为有些概念尚不清楚)。

您要做的是构建现有的编辑视图(edit.html.erb)。您希望在该视图中的某处添加内容,当然需要在控制器中进行准备,以便视图可以访问它。

因此,在您的控制器中,您可能会在@website_content = HTTParty.get('url')中执行某些操作,这意味着您可以使用@website_content来显示您下载的JSON。