Ruby on rails 无法在Ruby on Rails中管理关联
我有一个Ruby on rails 无法在Ruby on Rails中管理关联,ruby-on-rails,ruby,associations,ruby-on-rails-3,Ruby On Rails,Ruby,Associations,Ruby On Rails 3,我有一个Post模型,用于存储来宾用户发布的内容,该内容由管理员用户管理。管理员有权阻止或取消阻止特定帖子 我想做的是: 向来宾用户显示所有未阻止的帖子 向管理员用户显示所有帖子 对于第一个需求,我有一个模型BlockedPost,它与Post模型有多态关联。管理员将阻止的帖子将保留在BlockedPost模型中 对于第二个要求,我必须给予管理员阻止或取消阻止任何特定内容的权利。因此,在我的posts/index.html.erb中,我已经完成了这项工作 <% @posts.each do
Post
模型,用于存储来宾用户发布的内容,该内容由管理员用户管理。管理员有权阻止或取消阻止特定帖子
我想做的是:
BlockedPost
,它与Post
模型有多态关联。管理员将阻止的帖子将保留在BlockedPost
模型中
对于第二个要求,我必须给予管理员阻止或取消阻止任何特定内容的权利。因此,在我的posts/index.html.erb
中,我已经完成了这项工作
<% @posts.each do |post| %>
<% post.content %>
<% if post.post_blocked? %>
<td><%= link_to 'Unblock', blocked_post_path(content.id),:method => :delete%></td>
<% else %>
<td><%= link_to 'Block', create_blocked_post_path(content.id) %></td>
<% end %>
<% end %>
这是可行的,但问题是每次调用post\u blocked?
方法时,它都会进行数据库调用
有没有办法停止这种行为并获取一个数据库调用本身中所有帖子的状态?嗯。。。我认为你应该稍微改变一下你的模型,因为它们有点不合适,而且没有任何快速的方法可以从DB获得你的帖子, 删除BlockedPost模型 并将列添加到Post模型(在迁移中)
t.boolean:blocked,:default=>true
我会这样做:
@blocked_posts = Post.where( :blocked => false)
@unblocked_posts = Post.where( :blocked => true )
或者在Post模型中准备作用域
然后在您的视图中只显示两个列表
<% @unblocked_posts.each do |upost| %>
<%= upost.content %>
<%= link_to 'Block that post', ... %>
<% end %>
<% @blocked_posts.each do |bpost| %>
<%= bpost.content %>
<%= link_to 'Unblock', ... %>
<% end %>
当你提出问题时,暗示“需要帮助”;如果你把它放在文章的标题中,你可能会得到一些不愉快的目光。
<% @unblocked_posts.each do |upost| %>
<%= upost.content %>
<%= link_to 'Block that post', ... %>
<% end %>
<% @blocked_posts.each do |bpost| %>
<%= bpost.content %>
<%= link_to 'Unblock', ... %>
<% end %>