Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用ruby/sinatra在erb中显示值_Ruby_Activerecord_Sinatra_Erb - Fatal编程技术网

无法使用ruby/sinatra在erb中显示值

无法使用ruby/sinatra在erb中显示值,ruby,activerecord,sinatra,erb,Ruby,Activerecord,Sinatra,Erb,我有两个模型类-管理员和比尔。我可以使用ActiveRecord从数据库中获取账单,但当我使用erb模板时,我无法显示账单信息(每个管理员可以有多张账单): app.rb get '/admins/:id' do @admin = Admin.find_by(id:params[:id]) @bills = Bill.find_by(user_id:params[:id]) erb :adminDetails end <ul>

我有两个模型类-管理员和比尔。我可以使用ActiveRecord从数据库中获取账单,但当我使用erb模板时,我无法显示账单信息(每个管理员可以有多张账单):

app.rb

  get '/admins/:id' do
        @admin = Admin.find_by(id:params[:id])
        @bills = Bill.find_by(user_id:params[:id])
        erb :adminDetails
  end
<ul>
    <li>full name: <%=@admin.name %></li>
    <li>email: <%=@admin.email %></li>
        <% @bills.each do |bill| %>
        <li>bill title: <%=bill.title %></li>
        <li>bill body: <%=bill.body %></li>
         <% end %>
</ul>
adminDetails.erb

  get '/admins/:id' do
        @admin = Admin.find_by(id:params[:id])
        @bills = Bill.find_by(user_id:params[:id])
        erb :adminDetails
  end
<ul>
    <li>full name: <%=@admin.name %></li>
    <li>email: <%=@admin.email %></li>
        <% @bills.each do |bill| %>
        <li>bill title: <%=bill.title %></li>
        <li>bill body: <%=bill.body %></li>
         <% end %>
</ul>
  • 全名:
  • 电邮:
  • 法案标题:
  • 法案主体:
我可以通过irb打印账单信息,但当我将其传递到erb模板时,我得到以下例外情况:

WARN: tilt autoloading 'tilt/erb' in a non thread-safe way; explicit require 'tilt/erb' suggested.
2015-09-10 05:00:26 - NoMethodError - undefined method `each' for #<Bill id: 1, admin_id: 1, title: "test1", body: "this is test1">:
        /usr/local/rvm/gems/ruby-2.2.1/gems/activemodel-4.2.4/lib/active_model/attribute_methods.rb:433:in `method_missing'
        /opt/test/ruby/7/views/adminDetails.erb:11:in `block in singleton class'
        /opt/test/ruby/7/views/adminDetails.erb:-6:in `instance_eval'
        /opt/test/ruby/7/views/adminDetails.erb:-6:in `singleton class'
        /opt/test/ruby/7/views/adminDetails.erb:-8:in `__tilt_20667340'
警告:以非线程安全的方式倾斜自动加载'tilt/erb';建议明确要求“倾斜/再倾斜”。
2015-09-10 05:00:26-命名错误-未定义的#的“每个”方法:
/usr/local/rvm/gems/ruby-2.2.1/gems/activemodel-4.2.4/lib/active_model/attribute_methods.rb:433:in'method_missing'
/opt/test/ruby/7/views/adminDetails.erb:11:in'block in singleton class'
/opt/test/ruby/7/views/adminDetails.erb:-6:in'instance_eval'
/opt/test/ruby/7/views/adminDetails.erb:-6:in'singleton class'
/opt/test/ruby/7/views/adminDetails.erb:-8:in`\uuuu tilt\u20667340'
票据型号

class Bill < ActiveRecord::Base
        belongs_to :admin
end
classbill

我的设置是否有问题导致此问题?提前感谢您尝试通过一条记录进行迭代
Bill.find_by(user_id:params[:id])
只返回一条记录(第一次匹配),将代码修复为:

@bills = Bill.where(user_id: params[:id])

请阅读文档,您的实例变量
@bills
可能不可枚举。换句话说,
@bills
可能不是实体
Bill
的数组

您正在尝试迭代

<Bill id: 1, admin_id: 1, title: "test1", body: "this is test1">

甚至

[#<Bill id: 1, admin_id: 1, title: "test1", body: "this is test1">]
[#]

这是因为
find_by
根据条件只返回第一个匹配的记录。

为什么不从
@admin
变量中提取账单? 您不再需要控制器中的
@bills

  get '/admins/:id' do
        @admin = Admin.find_by(id:params[:id])
        erb :adminDetails
  end
并将其用于模板:

  <% @admin.bills.each do |bill| %>
    <li>bill title: <%=bill.title %></li>
    <li>bill body: <%=bill.body %></li>
   <% end %>

  • 法案标题:
  • 法案主体:

  • 谢谢。您知道为什么erb甚至不会在集合中的迭代中显示每个
    的一个值吗?要显示一个值,请使用一个变量并在视图中不显示每个的情况下通过查找