0

如果用户完成了一些任务,我只想公开用户的个人资料。

我已经在我的 Rails 应用程序中设计了设置,现在如果有一个新帐户,即:、、、localhost:3000/users/1等......这些链接将起作用。localhost:3000/users/2localhost:3000/users/3

在用户在用户数据库中填写一些项目之前,如何将其全部设为私有。

谢谢

4

2 回答 2

3
  1. 创建一个名为的布尔列public,默认值false位于用户表中
  2. public属性设置为在用户模型中可访问
  3. 当用户完成某些任务时,设置public用户的属性为true
  4. 对于show.html.erb用户,您可以使用一些代码显示两个不同的内容,例如
<%- if @user.public %>
  <p>Show content for public profile</p>
<%- else %>
  <p>This profile is private</p>
<% end %>
于 2013-08-21T00:24:58.393 回答
0

考虑这种方法:

class User < ActiveRecord::Base
  MIN_TASK_COUNT = 5 # Minimum tasks for profile to be public

  has_many :tasks

  def public?
    tasks_count >= MIN_TASK_COUNT
  end
end

class Task  < ActiveRecord::Base

  belongs_to :user, counter_cache: true

end

然后在你的控制器中:

class UsersController < ApplicationController

  def show
    @user = User.find(params[:id)
    if @user.public?
      render :public_profile, user: @user
    else
      render :private_profile, user: @user
    end
  end
end

请注意,您应该创建app/views/users/_private_profile.html.erbapp/views/users/_public_profile.html.erb部分并向用户表添加一tasks_count列。

于 2013-08-21T00:56:46.363 回答