Ruby on rails 需要一些ruby数组代码的帮助吗

Ruby on rails 需要一些ruby数组代码的帮助吗,ruby-on-rails,arrays,Ruby On Rails,Arrays,我正在制作一个应用程序,当前登录的用户可以写评论,并将每个评论公开或私有, 用单选按钮 如果是公共的,其他所有用户都可以看到该评论。如果是私有的,则只有当前用户才能看到它 visible.true和visible.false,具体取决于选择的单选按钮 我正试图想出代码/语法来让它工作 比如: #review.user is the person who wrote a particular review #if review.user is not current_user, a

我正在制作一个应用程序,当前登录的用户可以写评论,并将每个评论公开或私有, 用单选按钮

如果是公共的,其他所有用户都可以看到该评论。如果是私有的,则只有当前用户才能看到它

visible.true和visible.false,具体取决于选择的单选按钮

我正试图想出代码/语法来让它工作

比如:

    #review.user is the person who wrote a particular review
    #if review.user is not current_user, and the review is
    #marked as false, then don't show that review
    If review.user != current_user
    && review.visible = false
    don't show review.
目前,我在一个名为"helper.erb的网站上:

  def review_block(review, options = {})
    options = {:review => review}
    render 'reviews/review', options
  end
在我看来,show.html.erb:

   <div class="reviews" >
<% @reviews.each do |review| %>
      <%= review_block review %>
    <% end %>
</div>

您是否有机会告诉我应该如何修改我的助手以使其正常工作,或者其他建议?

如果您想筛选@reviews数组,您可以执行以下操作:

@reviews.select { |review| review.visible_to?(current_user) }.each do |review|
    render 'reviews/review', :review => review
end
 #reviews_controller.rb
 @reviews = Review.visible_to(current_user)
数组的select方法使用作为块传递的条件过滤给定数组。我会将可视性逻辑移到Review模型中的方法调用visible\u to?就像你上面说的:

# review.rb
def visible_to?(user)
  self.user.id == user.id || # assuming they have an ID 
  visible == true
end
更好的是,如果您使用的是Rails,则可以从视图中完全删除select方法调用,并在Review类中创建一个作用域

编辑:使用范围

 #review.rb
 scope :visible_to, lambda { |user| conditions( 'user_id = ? or visible = ?', user.id, true ) }
这样,当您构建@reviews数组时——可能是在控制器操作中,您可以执行以下操作:

@reviews.select { |review| review.visible_to?(current_user) }.each do |review|
    render 'reviews/review', :review => review
end
 #reviews_controller.rb
 @reviews = Review.visible_to(current_user)
显然,您可以嵌套多个作用域,如顺序、限制、位置等,并按照您想要的方式过滤评论。然而,该实用程序对您可见吗?方法还应该与范围一起为实例本身定义


请始终记住,您的观点应尽可能地愚蠢,即您的观点应至少了解您的模型和业务逻辑。这将确保您的视图和模型之间没有紧密的依赖关系。

review.visible==false not review.visible=falseTiago,您是一个传奇!工作完美。不确定创建作用域意味着什么,我们将研究它,但您的代码工作得很好。我做这个项目已经一年了,按你的速度,一个星期就可以完成。请随意来这里度假,我们将讨论铁路,我将支付你的膳宿费和机票费……这对我来说会更便宜,我发誓!伟大的但是我没有检查它。至于作用域,它们是ActiveRecord框架的一部分,允许您将SQL筛选器定义为ActiveRecord类及其结果ActiveRecord::Relation的一部分。我将用范围示例编辑我的答案。再次干杯。我将暂时坚持第一个,因为我更了解它,但是我知道你关于保持视图“哑”的意思——我已经在代码中注释了,以便将来再参考这个问题。至于我的reviews_helper.rb,它只包含我问题中的代码,我只是删除了那个文件——没有它,我的应用程序可以正常工作,它不会影响其他任何东西。你认为这没关系,或者我应该保留它,以防将来有什么影响?