Ruby on rails Rails私有/公共消息切换

Ruby on rails Rails私有/公共消息切换,ruby-on-rails,social-networking,toggle,private,Ruby On Rails,Social Networking,Toggle,Private,我不太确定该如何构建这个问题,但我正在使用rails从头开始构建一个社交网络;一个特点是推特风格的消息。我试图创建一个选项,当用户提交他们的消息时,会有一个复选框显示“private”。如果选中该复选框,则只有用户的朋友才能看到提交内容。如果选中该复选框,任何用户都可以看到问题 我应该如何着手实施这一点?我甚至不知道在哪里可以找到一个甚至是模糊相似的想法或策略。任何建议都将不胜感激。这可以通过给消息一个布尔“private”属性轻松完成。当它设置为true(选中复选框提交表单)时,只有朋友才能查

我不太确定该如何构建这个问题,但我正在使用rails从头开始构建一个社交网络;一个特点是推特风格的消息。我试图创建一个选项,当用户提交他们的消息时,会有一个复选框显示“private”。如果选中该复选框,则只有用户的朋友才能看到提交内容。如果选中该复选框,任何用户都可以看到问题


我应该如何着手实施这一点?我甚至不知道在哪里可以找到一个甚至是模糊相似的想法或策略。任何建议都将不胜感激。

这可以通过给消息一个布尔“private”属性轻松完成。当它设置为true(选中复选框提交表单)时,只有朋友才能查看它。如果它是假的(或零),任何人都可以看到它。然后,这只是有一个方法的问题,如

def is_allowed_to_view?(comment)
  current_user.is_friends_with(comment.creator) || !comment.private
end
在您的
User.rb
模型中,或其他一些检查隐私以获取评论的方法中。

您可以使用或


由于如果复选框未选中,则复选框值不会随HTML表单提交一起发送,因此在使用复选框时,您应该知道一些注意事项:

我看不出有任何问题。如果未选中该框且未发布任何值,则标志为nil,其计算结果不为true。因此,当第一次创建模型对象时,注释不会被计算为私有。@davidcelis,你说得对。但是,如果模型对象已选中该框,并且用户取消选中该框,则参数散列中不会有值,并且“check”永远不会从模型对象中删除。我粘贴的URL说,现代rails通过包含隐藏表单字段来解决这个问题,但需要注意的是,如果复选框通过数组访问数据,则隐藏表单字段会被破坏。嗯,我没有意识到这一点。知道真的很有用。我想,如果OP允许用户更新评论和更改他们的隐私状态,一对单选按钮将是更好的选择(我只建议一对,因为一个单选按钮无法取消选择),因此无法允许用户稍后通过复选框更改状态?@Ryan Max,在旧的Rails中,您需要用“unchecked”框填充临时散列,合并到
params
散列中,然后您就可以得到答案了。基于我在回答中包含的URL,看起来更现代的Rails版本中包含了一些帮助代码来伪造它,这样您就可以编写外观良好的代码,框架将处理幕后的混乱。但是,如果您将复选框的结果存储在模型中的数组中,它将无法处理混乱。在这种情况下,您可能必须在复选框设置为unchecked的情况下执行丑陋的临时数组。