加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails-4 – 使用Active Model Serializers,如何渲染部分

发布时间:2020-12-16 21:02:25 所属栏目:百科 来源:网络整理
导读:我正在创建一个新闻源并使用Active Model Serializers gem设置 JSON响应.我想渲染一个常规的ERB部分并将其作为JSON中的一个属性. 控制器/ posts_controller.rb: def index @posts = Post.all respond_to do |format| format.json { render json: @posts.to_
我正在创建一个新闻源并使用Active Model Serializers gem设置 JSON响应.我想渲染一个常规的ERB部分并将其作为JSON中的一个属性.

控制器/ posts_controller.rb:

def index
  @posts = Post.all
  respond_to do |format|
    format.json { render json: @posts.to_a,each_serializer: PostSerializer }
  end
end

串行器/ post_serializer.rb:

def event_html
  ApplicationController.new.render_to_string(:partial => 'events/event',:locals => { :event => object.event }) if object.event
end

不幸的是,我的视图有一些使用帮助器和请求对象(url)的代码,当我尝试这样做时,我遇到了错误.

事件/ _event.html.erb:

<div class="event">
  <h4 class="title"><%= link_to event.name,event %></h4>
  <div class="date"><%= date_range event.start_at,event.end_at %></div>
  <div class="description"><%= event.description.html_safe %></div>
</div>

nil的未定义方法`host’:NilClass

有什么好办法可以解决这个问题吗?

解决方法

这是因为您的控制器缺少响应属性.

您可以按如下方式设置控制器请求:

def event_html
  ApplicationController.new.tap {|c|  
    c.request = ActionController::TestRequest.new(host: "localhost")
  }.render_to_string(:partial => 'events/event',:locals => { :event => object.event }) if object.event
 end

但是,对于您的情况,我会将现有控制器作为上下文传递给序列化程序

控制器/ posts_controller.rb:

def index
  @posts = Post.all
  respond_to do |format|
    format.json { render json: @posts.to_a,each_serializer: PostSerializer,context: self }
  end
end
# ... or ...
def default_serializer_options
  {
    context: self
  }
end

串行器/ post_serializer.rb:

def event_html
  context.render_to_string(:partial => 'events/event',:locals => { :event => object.event }) if object.event
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读