如果是respond_to?什么都不回来

时间:2013-09-22 00:35:07

标签: ruby-on-rails ruby ruby-on-rails-4 haml

我有一些代码应该检查是否存在属性的方法调用,似乎if或者其他任何东西都没有返回...

%h2= @post.title
    .row                    
        .col-sm-12
            = render "blog_meta", :post => @post
            #text_body
                = @post.content
            %hr
            - if @post.comments.count > 0
                %h2 Comments
                #comments
                    - @post.comments.where(:original_id => nil).each do |comment| 
                        .comment
                            .profile
                                %img{:src => "/assets/profile_image_sample.jpg"}
                            .message
                                .username
                                    - if comment.user.respond_to?('username')
                                        .username= comment.user.username
                                    - else
                                        .username= comment.user.first_name
                                = comment.content
                                - logger.info "LOGGER--->>" + comment.user.first_name
                                .reply-link
                                    %a{:href => "#"} Reply to Comment
                        - if comment.replies.count > 0
                            - nesting = 0
                            - comment.replies.each do |comment|
                                = render "comment", :comment => comment, :nesting => nesting
                %hr
            = render "submit_comment"

但是,如果我只是= comment.user.first_name没有条件,那么它可以正常工作..

1 个答案:

答案 0 :(得分:2)

user很可能会回复username,但它是blanknil。你可能想要这样做

    - if comment.user.username.blank?
        .username= comment.user.first_name
    - else
        .username= comment.user.username

respond_to用于检查是否为对象定义了方法。如果为对象定义了方法,它将返回true。它与该方法的输出无关。