我是rails和正则表达式的新手。我正在尝试创建一个应用程序,用户可以使用以下两种类型的电子邮件地址之一注册:user@a.edu或user@b.edu。我正在创建一个页面,显示不是当前用户类型的所有用户。例如,jason @ a.edu已登录,页面将显示b类型的所有用户。如果登录了lauren@b.edu,页面将显示类型a的所有用户。我正在尝试使用正则表达式来了解基于电子邮件地址登录的用户类型,并在用户单击链接时动态生成页面。我在模型中创建了这个方法:
def other_schools
if /.+@a\.edu/.match(current_user.email)
User.where(email != /.+@a\.edu/)
else
render :text => 'NOT WORKING', :status => :unauthorized
end
end
这是控制器:
def index
#authorize! :index, :static_pages
@users = current_user.other_schools
end
以下是显示每个用户的视图:
<% @users.each do |user| %>
<li class="span3">
<div class="thumbnail" style="background: white;">
<%= image_tag "idea.jpeg" %>
<h3><%= user.role %></h3>
<p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p>
<a class="btn btn-primary">View</a>
</div>
</li>
<% end %>
视图只是遍历@user对象。当我尝试加载页面时,我被告知有一个未定义的局部变量或方法`current_user'。我该如何解决这个问题?
答案 0 :(得分:1)
您的模型没有“了解”帮助方法。 Current_user就是其中之一。所以你需要将用户对象传递给函数/使用当前用户实例来获取结果:
# controller
def index
#authorize! :index, :static_pages
@users = User.other_schools(current_user)
end
# User model
def self.other_schools(user) # class method
if user.email.match(/.+@a\.edu/)
User.where("email NOT LIKE '%@a.edu'")
else
User.where('false') # workaround to returns an empty AR::Relation
end
end
替代方案(使用current_user实例):
# controller
def index
#authorize! :index, :static_pages
@users = current_user.other_schools
if @users.blank?
render :text => 'NOT WORKING', :status => :unauthorized
end
end
# User model
def other_schools # instance method
if self.email.match(/.+@a\.edu/)
User.where("email NOT LIKE '%@a.edu'")
else
User.where('false') # workaround to returns an empty AR::Relation
end
end