gpt4 book ai didi

ruby-on-rails - 如何在 Controller 中从 ERB 对象渲染 html?

转载 作者:太空宇宙 更新时间:2023-11-03 16:27:23 25 4
gpt4 key购买 nike

我正在尝试从 Controller 中的 ERB 对象呈现 HTML(ERB 对象存储在数据库中),但没有成功。

我想做这样的事情:

首先,我创建了一个 Func 实例:

Func.Create(text: "<% @users.each do |user| %>
<td><%= user.id %></td>
<td><%= link_to user.username, user_path(user) %></td>")

然后,在 Controller 中:

class MainController < ApplicationController
def foo
@users = User.all
render :html => bar(binding)
end

def bar(controller_binding)
html = Func.find(1)
template = ERB.new(html.text)
template.result(controller_binding)
end
end

但我得到的只是错误,像这样:

"Missing template main/resource_name, application/resource_name with
{:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :raw, :ruby,
:jbuilder, :coffee]}. Searched in: * "c:/Users/david/sample/app/views""

"(erb):3: syntax error, unexpected $end, expecting keyword_end ...
ut.force_encoding(__ENCODING__) ... ^"

最佳答案

替换

Func.Create(text: "<% @users.each do |user| %>
<td><%= user.id %></td>
<td><%= link_to user.username, user_path(user) %></td>")

    Func.Create(text: "<% if @users.nil? %>
<p> There are no users in database </p>
<% else %>
<% @users.each do |user| %>
<td><%= user.id %></td>
<td><%= link_to user.username, user_path(user) %></td><% end %> <% end %>")

<% end %> block 的结尾丢失了。

另外,替换 render :html => bar(binding)render :inline => bar(binding)

您还可以缩短您的代码,如下所示,

  def foo
@users = User.all
html = Func.find(1)
render :inline => html.text
end

关于ruby-on-rails - 如何在 Controller 中从 ERB 对象渲染 html?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22207952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com