在 Ruby on Rails 视图中输出对象属性

牛顿

我正在创建一个简单的应用程序来管理 Rails 中的乐队和音乐家数据库,并且在视图文件中打印对象属性值时遇到了问题。

模型是乐队,音乐家,它们通过一个连接表连接起来,形成一个 HABTM 关系。这是我的架构文件:

ActiveRecord::Schema.define(version: 20170613125004) do

  create_table "band_musicians", force: :cascade do |t|
    t.integer "band_id"
    t.integer "musician_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["band_id"], name: "index_band_musicians_on_band_id"
    t.index ["musician_id"], name: "index_band_musicians_on_musician_id"
  end

  create_table "bands", force: :cascade do |t|
    t.string "name"
    t.string "description"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  create_table "musicians", force: :cascade do |t|
    t.string "name"
    t.string "instrument"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end
end

然后我使用以下seeds.rb 脚本插入了一些种子数据,这似乎工作正常。

band_data = [[name:"band 1", description: "band 1 description"],
             [name:"band 2", description: "band 2 description"],
             [name:"band 3", description: "band 3 description"],
             [name:"band 4", description: "band 4 description"]]

musician_data = [[name:"musician 1", instrument:"instrument 1"],
                 [name:"musician 2", instrument:"instrument 2"],
                 [name:"musician 3", instrument:"instrument 3"],
                 [name:"musician 4", instrument:"instrument 4"],
                 [name:"musician 5", instrument:"instrument 1"],
                 [name:"musician 6", instrument:"instrument 5"],
                 [name:"musician 7", instrument:"instrument 1"],
                 [name:"musician 8", instrument:"instrument 2"],
                 [name:"musician 9", instrument:"instrument 3"],
                 [name:"musician 10", instrument:"instrument 1"],
                 [name:"musician 11", instrument:"instrument 4"],
                 [name:"musician 12", instrument:"instrument 1"],
                 [name:"musician 13", instrument:"instrument 2"]]

band_data.each{|name, desc| Band.create(name:name, description:desc)}
musician_data.each{|name, instr| Musician.create(name:name, instrument:instr)}

bands = Band.all()
musicians = Musician.all()

bands.each do |b|
  r = Random.new
  bandSize = r.rand(2..5)
  bandSize.times do
    m = r.rand(0...musicians.length)
    b.band_musicians.create(musician_id: musicians[m].id)
  end
end

然后我想将数据输出到视图,所以我创建了一个 Band 控制器:

class BandsController < ApplicationController
  def index
    @band_data = Band.includes(:musicians).all
    @musician_data = Musician.all
  end

这个 index.html.erb 带视图:

<% @band_data.each do |b| %>
    <p>
      <%= b.name %>
      <br>
      <%= b.description %>
    <ul>
      <% b.musicians.each do |m| %>
          <li>
            <%= m.name %>
          </li>
      <% end %>
    </ul>
    </p>
    <hr>
<% end %>

数据库似乎已正确播种,但输出的是每个对象的哈希表示,而不是属性值。这就是我得到的:

{:name=>"band 1", :description=>"band 1 description"} 
{:name=>"musician 12", :instrument=>"instrument 1"} 
{:name=>"musician 1", :instrument=>"instrument 1"} 
{:name=>"musician 10", :instrument=>"instrument 1"} 

当我想要更像的东西时:

band 1
band 1 description
 - musician 12
 - musician 1
 - musician 10

有什么建议么?

亚当·拉塞克

因为您key: value在方括号内使用语法,所以 Ruby 假设您想要一个数组内的散列。有很多情况可以省略大括号,Ruby 无论如何都会将其解析为散列。

此外,您可以将一个属性数组传递给Model::create它,它会一次创建多行。通常没有那么有用,除了种子数据。

Band.create [{name:"band 1", description: "band 1 description"},
             {name:"band 2", description: "band 2 description"},
             {name:"band 3", description: "band 3 description"},
             {name:"band 4", description: "band 4 description"}]

Musician.create [{name:"musician 1", instrument:"instrument 1"},
                 {name:"musician 2", instrument:"instrument 2"},
                 {name:"musician 3", instrument:"instrument 3"},
                 {name:"musician 4", instrument:"instrument 4"},
                 {name:"musician 5", instrument:"instrument 1"},
                 {name:"musician 6", instrument:"instrument 5"},
                 {name:"musician 7", instrument:"instrument 1"},
                 {name:"musician 8", instrument:"instrument 2"},
                 {name:"musician 9", instrument:"instrument 3"},
                 {name:"musician 10", instrument:"instrument 1"},
                 {name:"musician 11", instrument:"instrument 4"},
                 {name:"musician 12", instrument:"instrument 1"},
                 {name:"musician 13", instrument:"instrument 2"}]

所以答案是你实际上正确地渲染了视图,是种子数据被弄乱了。

如果您对某些内容以特定方式呈现的原因感到困惑,一种简单的调试方法是将 a<% console %>放入视图中,Rails 会在执行时在该位置为您提供一个交互式控制台,让您可以直接检查运行时环境。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在视图中查找用户对象?Ruby on Rails

来自分类Dev

Ruby on Rails新对象属性

来自分类Dev

在视图中创建Ruby on Rails矩阵表

来自分类Dev

视图中的Ruby on Rails表达式

来自分类Dev

在 Ruby on Rails 视图中加载 JavaScript

来自分类Dev

Ruby on Rails:更新属性

来自分类Dev

为什么我无法在 ruby rails 的视图中访问模型的属性?

来自分类Dev

Ruby on Rails:如何通过Jquery在视图中渲染部分视图

来自分类Dev

Ruby On Rails,视图中每个循环中的代码

来自分类Dev

在所有视图中调用CoffeeScript函数(Ruby on Rails)

来自分类Dev

Ruby on Rails调用对象的方法

来自分类Dev

比较Ruby / Rails TimeWithZone对象

来自分类Dev

Rails视图中的Json对象

来自分类Dev

访问联接表属性以在视图上显示内容,Ruby on Rails?

来自分类Dev

Ruby on Rails:如何编写视图以创建复合对象?

来自分类Dev

删除嵌套在Ruby on Rails对象数组中的属性

来自分类Dev

Ruby on Rails循环:不输出数据

来自分类Dev

集合中的Ruby on Rails集合输出

来自分类Dev

从我的Ruby on Rails Gem渲染视图

来自分类Dev

在Ruby on Rails中编号视图的结果

来自分类Dev

从Rails中的视图执行ruby代码

来自分类Dev

Ruby on Rails:将参数传递给视图

来自分类Dev

Ruby on Rails Mailer 中的操作视图错误

来自分类Dev

Ruby on Rails,多次检查nil属性

来自分类Dev

Ruby on Rails-导航属性:o?

来自分类Dev

Ruby on Rails中的嵌套属性无法保存

来自分类Dev

Ruby on Rails-导航属性:o?

来自分类Dev

Ruby on Rails:在查询中转换属性名称

来自分类Dev

在 ruby on rails 中传递关联属性