我的 Post 模型有一个名为“已发布”的布尔值:
架构.rb: *
create_table "posts", :force => true do |t|
t.string "title"
t.string "content"
t.integer "user_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.boolean "published", :default => false
end
如果为真,则帖子被视为已发布,并出现在用户个人资料的已发布部分,如果为假,则显示在草稿部分(对不起,但我不确定如何处理代码重复)。
post_controller.rb:
class PostsController < ApplicationController
before_filter :authenticate_user!, :except => [:show, :index]
def index
@posts = Post.all
end
ETC...
users_controller.rb:
class UsersController < ApplicationController
def index
@users = User.all
end
def show
@user = User.find(params[:id])
@posts = @user.posts
end
ETC...
_shared/posts.thml:
<h2>Published</h2>
<% @posts.each do |post| %>
<% if post.published? %>
<div id="post-<%= post.id %>" class="post">
<%= image_tag post.image.url(:medium) %>
<h2 class="post-title"><%= link_to post.title, post %></h2>
<%= link_to post.user.email, post.user %>
<p><%= post.content %></p>
</div>
<% end %>
<% end %>
<h2>Draft</h2>
<% @posts.each do |post| %>
<% if not post.published? %>
<div id="post-<%= post.id %>" class="post">
<%= image_tag post.image.url(:medium) %>
<h2 class="post-title"><%= link_to post.title, post %></h2>
<%= link_to post.user.email, post.user %>
<p><%= post.content %></p>
</div>
<% end %>
<% end %>
例子:
users.html.erb:
<h2>User Show</h2>
<%= image_tag @user.avatar.url(:medium) %>
<span>Email: <%= @user.email %></span><br />
<span>ID: <%= @user.id %></span><br />
<%= render 'shared/posts' %>
index.html.erb
<%= render 'shared/posts' %>
(我知道这些观点有点混乱。我想稍后我会在每个帖子草稿旁边显示一个文字,上面写着“草稿”)。
问题是帖子将按created_at
日期排序。我希望它们按published_at
帖子索引页面中的日期排序(我认为这更有意义)。
我知道如何published_at
t.datetime
通过迁移添加字段。但我不确定该published_at
领域的逻辑使用什么代码。
有什么建议么?
(顺便说一句,哪个听起来更正确?' published_at
'还是' published_on
'?)