Ruby on Rails:仅当condition为true时才显示用户配置文件

时间:2013-08-21 00:15:53

标签: ruby-on-rails devise ruby-on-rails-3.2 conditional-statements

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

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

如果用户在用户数据库中填写了少量项目,我该如何将其全部设为私有。

由于

2 个答案:

答案 0 :(得分:3)

  1. 在用户表格中创建名为public的默认值为false的布尔列
  2. public属性设置为可在用户模型中访问
  3. 当用户完成某些任务时,请将用户的public属性设置为true
  4. show.html.erb用户中,您可以使用某些代码(如
  5. )显示两种不同的内容
    <%- if @user.public %>
      <p>Show content for public profile</p>
    <%- else %>
      <p>This profile is private</p>
    <% end %>
    

答案 1 :(得分: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列。