在图像不可用时使用refile gem时捕获异常

时间:2015-01-22 01:46:13

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

在我的控制台内部,显示了username@email.com.attacher_。我很确定refile不起作用,因为用户的图像不存在。但是,当文件为nil时,如何设置它来处理方法块?

  module MessagesHelper

      def recipients_options
        s = ''
        users = User.all + BizUser.all; users.each do |user|
          s << "<option value='#{user.id}'
    data-img-src='#{attachment_url(@user, user.email, :profile_avatar,
    :fill, 50, 50)}'>#{user.username}</option>"
        end
        s.html_safe
      end
    end

以下是我的日志文件中显示的错误

NoMethodError in Messages#new
ActionView::Template::Error (undefined method `profile_avatar_attacher' for nil:NilClass):
     9:   <div class="row">
    10:     <div class="large-5 medium-5 small-4 columns" style="padding-bottom: 10px;">
    11:       <%= label_tag 'recipients', 'Choose recipients' %>
    12:       <%= select_tag 'recipients', recipients_options, multiple: true, class: 'form-control chosen-it' %>
    13:     </div>
    14:   </div>
    15:   <div class="row">
  app/helpers/messages_helper.rb:6:in `block in recipients_options'


module MessagesHelper

  def recipients_options
    s = ''
    users = User.all + BizUser.all; users.each do |user|
      s << "<option value='#{user.id}' data-img-src='#{attachment_url(@user, :profile_avatar, :fill, 30, 30)}'>#{user.username}</option>"
    end
    s.html_safe
  end
end

用于头像方法的ApplicationHelper

def avatar_for_user
    image_tag attachment_url(@user, :profile_avatar, :fill, 30, 30)
  end

我在participant.html.erb部分中也收到错误

<% conversation.participants.each do |participant| %>
    <% unless participant == current_user %>
        <%= avatar_for_user participant %>
    <% end %>
<% end %>

1 个答案:

答案 0 :(得分:1)

您正在混合user局部变量和@user实例变量。

recipients_options拨打电话

attachment_url(@user :profile_avatar, :fill, 30, 30)

您为每个选项呈现相同的附件(@user的附件)。

我怀疑你想打电话

attachment_url(user, :profile_avatar, :fill, 30, 30)

从而为每个用户呈现附件。

您收到NoMethod错误的原因似乎是@user变量为零。

此外,avatar_for_user似乎很奇怪。您可以在没有参数的情况下定义它,但在部分中将其传递给用户。