【问题标题】:Rails Private / Public Message ToggleRails 私人/公共消息切换
【发布时间】:2010-07-21 04:28:57
【问题描述】:

我不太清楚如何提出这个问题,但我正在使用 Rails 从头开始​​构建一个社交网络;一项功能是 twitter 风格的消息。我正在尝试创建一个选项,当用户提交他们的消息时,有一个显示“私人”的复选框。如果选中该复选框,则只有用户朋友可以看到提交。如果选中该复选框,则任何用户都可以看到问题。

我应该如何实现这个?我什至不知道在哪里寻找一个甚至模糊相似的想法或策略。任何建议将不胜感激。

【问题讨论】:

    标签: ruby-on-rails social-networking toggle private


    【解决方案1】:

    您可以为此使用radio-buttoncheck-box

    因为如果未选中复选框,则复选框值不会随 HTML 表单提交一起发送,因此您应该了解有关使用复选框的一些注意事项:http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#M002298

    【讨论】:

    • 我看不出这有什么问题。如果未选中该框且未发布任何值,则标志为 nil,它不会评估为真。因此,评论不会被评估为私人评论。
    • @davidcelis,你是对的,当模型对象首次创建时。但是,如果模型对象已经选中该框,并且用户取消选中该框,则参数哈希中将没有值,并且永远不会从模型对象中删除“检查”。我粘贴的 URL 说现代 Rails 通过包含隐藏的表单字段来解决这个问题,但 警告 是如果复选框通过数组访问数据,隐藏的表单字段会中断。
    • 嗯,我不知道这一点。知道真的很有用。我想,如果 OP 允许用户更新 cmets 并更改他们的隐私状态,一对单选按钮会是更好的选择(我只建议一对,因为单个单选按钮不能被取消选择)
    • 所以没有办法允许用户稍后使用复选框更改状态?
    • @Ryan Max,在较旧的 Rails 中,您需要使用“未选中”框填充临时哈希,合并 params 哈希,然后 然后 你会得到您的答案。根据我在答案中包含的 URL,看起来更现代的 Rails 版本包含了一些辅助代码来伪造它,因此您可以编写看起来不错的代码,框架将处理幕后的混乱。但是,如果您将复选框的结果存储在模型中的数组中,它就无法处理混乱。在这种情况下,您可能不得不将复选框设置为未选中的丑陋临时数组。
    【解决方案2】:

    这可以通过给消息一个布尔“私有”属性来轻松完成。当它设置为 true 时(提交表单并选中该框),只有朋友可以查看它。如果它是假的(或零),任何人都可以看到它。那么,只要有这样的方法就好了……

    def is_allowed_to_view?(comment)
      current_user.is_friends_with(comment.creator) || !comment.private
    end
    

    在您的 User.rb 模型中,或其他检查评论隐私的方法中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-11
      相关资源
      最近更新 更多