我需要一个从数据库查看数据的方式帮助。我有一个包含来自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....我想切换显示书号为书名的方式。我在想不变的板子,比如:
在脚本模型中:
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旁边的图书编号。
当前的my DB模式如下:
create_table :scripts do |t|
t.text :book
t.integer :chapter
t.integer :line
t.text :body我可以用它来代替
<td><%= text.book %></td>等待你的回答,伙伴们!致以问候!
发布于 2014-08-19 22:24:06
你需要做的就是创建一个自定义的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系统,这意味着您使用它所做的一切都将围绕着Rails展开。对于Rails,按照MVC Programming Pattern在Model中定义对象
这意味着每次构建对象(称为Model)时,都需要能够在模型内(在其他地方)为对象提供各种属性/设置。这很难如此简洁地描述,但这里有一些需要考虑的事情:

如果您使用模型来填充特定属性,则需要确保在模型本身中设置这些属性。其他任何东西都不会像你想要的那样工作。
--
如果你需要,我可以解释更多
发布于 2014-08-19 20:44:14
试试<td><%= BOOK[text.book.to_s] %></td>
发布于 2014-08-19 20:53:10
据我从错误中理解,text.book返回一个整数,它是book_number,所以要让它工作(根据您当前的逻辑,这有点扭曲),您应该尝试类似这样的操作:将脚本模型中的book_name方法实现替换为以下代码:
def book_name(book_number)
BOOKS[book_number]
end因为您当前的实现需要book_number,但是您没有提供它。在您的视图中,您可以通过键入book_number to book_name方法:<td><%= text.book_name(text.book.to_s) %></td>来调用它
https://stackoverflow.com/questions/25383589
复制相似问题