我希望找到一种很好的方法来检查我的对象,然后才能在视图中显示它们,这样我就不会出错了。
这是我的控制器
@user = User.find_by_username(params[:username])
@profile = @user.profile
@questions = @user.questions
这是我的观点
<% unless @profile.blank? %><%= link_to 'Edit Profile', :controller => 'profiles', :action => 'edit' %><% end %>
<% unless @user.blank? %>
Username:<%= @user.username %><br />
Member Since:<%= @user.created_at.strftime("%d %B %Y") %><br />
<% end %>
<% unless @profile.blank? %>
First Name: <%= @profile.first_name %><br />
Last Name: <%= @profile.last_name %><br /><br />
About: <%= @profile.body %><br /><br />
Location: <%= @profile.location %><br />
Birthday: <%= @profile.birthday.strftime("%d %B %Y") %><br />
<% end %>
正如你所看到的,我正在使用不止一种检查(检查除非@ profile.blank?),我认为会有更好的方法来做到这一点。
Rails是否有办法比我想出的更聪明?
答案 0 :(得分:9)
另外
<%= if @object.present? %>
对我来说,看起来比
简单得多<%= unless @object.blank? %>
特别是当我们有多个条件语句时(&&
\ ||
\ and
\ or
)。
答案 1 :(得分:5)
正如我所见,你无法跳过这个@ .blank?验证,因为你不想显示记录,如果它们是空的但我没有什么建议
1 - 将以下部分作为部分
<% unless @user.blank? %>
Username:<%= @user.username %><br />
Member Since:<%= @user.created_at.strftime("%d %B %Y") %><br />
<% end %>
和
<% unless @profile.blank? %>
First Name: <%= @profile.first_name %><br />
Last Name: <%= @profile.last_name %><br /><br />
About: <%= @profile.body %><br /><br />
Location: <%= @profile.location %><br />
Birthday: <%= @profile.birthday.strftime("%d %B %Y") %><br />
<% end %>
它可以让您的视图更清晰,并且可以让您灵活地在应用中的任何软件中使用它们
2 - 采取以下行
<% unless @profile.blank? %><%= link_to 'Edit Profile', :controller => 'profiles', :action=> 'edit' %><% end %>
在个人资料中显示为更合适
欢呼声
sameera
答案 2 :(得分:1)
根据rails文档,您可以使用association.nil查看是否存在任何关联对象?方法:
if @book.author.nil?
@msg = "No author found for this book"
end
答案 3 :(得分:0)
如何在保存之前为用户构建空配置文件?如何使用带有感叹号的类比来提升ActiveRecord::RecordNotFound
,而{{1}}将显示404页面。
P.S。我还建议将控制器修剪为一个实例变量。
答案 4 :(得分:0)
可能的方法是使用Object#presence
您应该始终像以前一样unless @object.blank?
。