2017-06-12 1 views
0

Rails 5.1.1, rubis 2.2.5p319, Carrierwave 1.1.0Carrierwave asset_path devient méthode non définie lorsqu'il est utilisé dans des rails aide

Essayer de factoriser un morceau de vue qui obtient réutilisé dans toute l'application en une aide et je frappe un mur. Deux chargeurs d'onde porteuse sont disponibles sur le modèle Issue: Image et Imageback. Je passe des variables à la méthode afin de déterminer quelle colonne je suis en train de frapper (passé en graphic dans le code ci-dessous)

méthode d'assistance (en application_helper.rb):

def issue_image_display(issue, graphic, size, sizeinpx, lodge = nil) 
    if graphic 
    if graphic == "imageback" 
     link_to image_tag(issue.imageback_url(size)), 
     imageback_url(:full), rel: :lazybox 
    else 
     link_to image_tag(issue.image_url(size)), 
     image_url(:full), rel: :lazybox 
    end 
    else 
    image_tag(
     "missing_flap.jpg", 
     alt: "No Flap Image for #{issue.combined}", 
     style: "width: #{sizeinpx}px" 
    ) 
    end 
end 

Ceci est invoqué par ce qui suit:

<ul class="issue-list" id="issues"> 
    <div class="page"> 
    <%# cache issue do %> 
     <%= render partial: "issues/issue_small", 
       collection: @issues, 
       as: :issue, 
       wishlist: false, 
       locals: { 
       size: :list, 
       sizeinpx: '200' 
       } %> 
    <%# end %> 
    </div> 
</ul> 

et que partielle qui est itéré, appelant la méthode aide réelle:

<li class="issue-container"> 
    <article class="issue"> 
    <%= issue_image_display(issue, issue.image, size, sizeinpx) %> 
    <p class="lodge-name"> 
     <%= link_to issue.combined, lodge_issue_path(issue.lodge, issue) %> 
     <span><%= issue.first_issue.stamp("1969") if issue.first_issue %> | (OA BBv6: <%= issue.oa_bb_combined %>)</span> 
    </p> 
    <% if :wishlist == true -%> 
    <p class="add-to-wishlist"> 
     <%= link_to 'Add to Wishlist', wishlist_items_path(issue_id: issue.id), method: :post, class: "button button-small" %> 
    </p> 
    <% end -%> 
    </article> 
</li> 

L'erreur est:

ActionView::Template::Error at /issues 
undefined method `asset_path' for #<ImageUploader::Uploader70194310458580:0x007faec5409400> 
+0

Dans quelle ligne du code vous obtenez cette erreur? – Pavan

+0

Il l'appelle comme la ligne 16 du fichier qui invoque le partiel, qui, en incluant l'autre chose que j'ai rogné est: '<% = render partial:" questions/issue_small ",' –

Répondre

0

Turns out il y a deux échecs ci-dessus. ActionView les masquait donc je continuais à le tirer plus haut jusqu'à ce que j'obtienne un numéro de ligne significatif.

if graphic 
    if graphic == "imageback" 
     link_to image_tag(issue.imageback_url(size)), 
     imageback_url(:full), rel: :lazybox 
    else 
     link_to image_tag(issue.image_url(size)), 
     image_url(:full), rel: :lazybox 
    end 
    else 

ne manquait à l'appel issue avant image_url, et il était si appeler la méthode carrierwave sur rien.

Le deuxième problème était le contrôle if graphic. Il s'avère que c'est toujours vrai dans la façon dont il est écrit. Pour passer cela, il devait devenir if !graphic.blank?. C'était secondaire par rapport à l'erreur réelle, mais en la documentant pour toute personne se heurtant à des étranges comme ça dans le futur.