Trying to come up with a more compact way of expressing this conditional in HAML and Ruby, perhaps with a ternary operator:
- if @page.nil?
%br (nothing yet)
- else
%br #{@page.name}
(looking for similar approach as per Neat way to conditionally test whether to add a class in HAML template)
Your help would be appreciated :)
The code you have makes the text a child of the <br>
element; that is not desirable. What you really meant, I think, was:
%br
- if @page.nil?
(nothing yet)
- else
#{@page.name}
For this you can simply do:
%br
#{@page.nil? ? "(nothing yet)" : @page.name}
Or
%br
= @page.nil? ? "(nothing yet)" : @page.name
Or simply:
<br>#{@page ? @page.name : "(nothing yet)"}
However, personally I would 'fix' this in the controller so that you always have a @page
, with something like:
unless @page
@page = Page.new( name:"(nothing yet)", … )
end
With this you can stub out what a new/empty/nothing page looks like and let your view treat it like any other. Your @page
still won't have a @page.id
, so you can use that for tests to decide if you are creating a new item or editing an existing one.
This is how I handle all my forms that may be used to create or edit an item: provide defaults by creating (but not adding to the database) an item with the default values.
Aside: You're creating a <br>
which is almost never a good idea, and you're creating it with Haml which should not be used for content markup. You might step back and think about what you're doing.
Simply do:
%br
= @page.try(:name)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With