我需要帮助查看数据库中的数据。 我有来自DB的内容的表格,如:
<tbody>
<% @scripts.each do |text| %>
<tr>
<td><%= text.book %></td>
<td><%= text.chapter %></td>
<td><%= text.line %></td>
<td><%= text.body %></td>
</tr>
<% end %>
</tbody>
输出就是这样:
book chapter line body
1 1 1 1 Lorem ipsum....
...
1 1 10 10 Lorem ipsum....
我想把节目号码的方式切换为书名。我在想Constant Board,比如:
脚本模型中的:
BOOKS = {"1" => "Book1", "2" => "Book2" .... "66" => "Book66"
def book_name
BOOKS[book_number]
end
脚本控制器中的:
def book_number
params[:script][:book]
end
视图文件中的:
<tbody>
<% @scripts.each do |text| %>
<tr>
<td><%= text.book_name %></td>
<td><%= text.chapter %></td>
<td><%= text.line %></td>
<td><%= text.body %></td>
</tr>
<% end %>
</tbody>
当我这样做时,我收到:
undefined local variable or method `book_number' for #<Script:0x007fdf5ed16a88>
如果我使用
<td><%= text.book.book_name %></td>
我收到:
undefined method `book_name' for "1":Fixnum
有什么想法吗?请帮忙。
或者,如果我可以将新记录作为“book_name”添加到数据库作为迁移,那么这个新表将所有书籍的名称添加到书号旁边的所有书籍记录1-66中。
当前我的数据库架构如下:
create_table :scripts do |t|
t.text :book
t.integer :chapter
t.integer :line
t.text :body
我可以用它代替
<td><%= text.book %></td>
等你回答队友!此致!
答案 0 :(得分:1)
你需要创建一个自定义的getter(我想?它是getter或setter!):
#app/models/script.rb
Class Script < ActiveRecord::Base
def name
"Book#{id}"
end
end
这将允许您致电:
@scripts = Script.all
@scripts.each do |book|
book.name
end
<强>物件强>
了解 如何运作
非常重要您遇到的问题是您当前正在尝试在控制器中设置模型/对象属性。这是一个很大的禁忌
Rails是一个object-orientated系统,这意味着你用它做的一切都将围绕objects。对于Rails,对象在Model
中根据MVC Programming Pattern
这意味着每次构建对象(调用Model
)时,您都需要能够为模型内的对象提供各种属性/设置(其他地方) )。如此简洁地描述起来很困难,但这里需要考虑的事情:
如果您使用模型填充特定属性,则需要确保在模型中设置它们。其他任何东西都不会按你的意愿运作。
-
如果需要,我可以解释更多
答案 1 :(得分:0)
尝试<td><%= BOOK[text.book.to_s] %></td>
答案 2 :(得分:0)
正如我从错误中理解的那样,text.book返回一个整数,即book_number,所以为了使它工作(根据你当前的逻辑,这有点扭曲),你应该尝试这样的事情:
用脚本替换脚本模型中的book_name
方法实现:
def book_name(book_number)
BOOKS[book_number]
end
因为您当前的实现需要book_number,但您不提供它。在您的视图中,您调用它,键入book_number到book_name方法:
<td><%= text.book_name(text.book.to_s) %></td>