我有一个带有布尔列published
的模型条目,默认设置为false
。这是完整的迁移文件:
class CreateMultifloraEntries < ActiveRecord::Migration[5.0]
def change
create_table :multiflora_entries do |t|
t.string :type, index: true
t.string :title
t.string :slug, unique: true
t.json :payload
t.integer :user_id, index: true
t.boolean :published, default: false
t.timestamps
end
end
end
在我的models/entry.rb
中,我添加了以下方法:
def published?
Entry.where("published", true)
end
并在index.html.erb
我得到了这个:
<% @entries.each do |entry| %>
# ...
<% if entry.published? %>
<p> Published <p>
<% else %>
<!-- There will be an AJAX request to set entry published later -->
<%= link_to "Publish", "whatever-path" %>
<% end %>
<% end %>
但是,当我创建一个条目并导航到我的索引视图时,该条目显示为已发布。
答案 0 :(得分:1)
好的,对于任何布尔属性,rails默认为您提供辅助方法。你不需要定义它。因此,在您的情况下entry.published?
将在没有您自己的书面方法的情况下工作。删除您自己的方法定义,不需要它。
仅仅是为了另外一件事,你定义了一个类方法,而不是一个实例方法。与您编写的方法一样,可以像Entry.published?
一样调用,但不能在Entry
的实例上调用。但在这种情况下entry.published?
将起作用,因为Rails为您定义了它,因为publish
是一个布尔字段。现在,您必须将方法的类实现修复为:
def self.published?
self.where(published: true).any?
end