2014-07-06 3 views
0

Je peux télécharger un fichier et enregistrer le nom de fichier dans la base de données en utilisant carrierwave. Je voudrais afficher l'image du fichier sur une autre page en utilisant l'association.Rails4: Comment afficher un fichier téléchargé en utilisant l'association?

(Althogh j'ai demandé au question pertinent de cela, un commentaire pourrait pas interdit. Je de rentrée, comme une nouvelle question.)

user.rb

class User < ActiveRecord::Base 
    has_many :articles, dependent: :destroy 
    . 
    . 
end 

article. rb

class Article < ActiveRecord::Base 
    . 
    . 
    belongs_to :user 
    has_many :photos, dependent: :destroy 
    accepts_nested_attributes_for :photos 
    . 
    . 
end 

photo.rb

class Photo < ActiveRecord::Base 
    belongs_to :article 
    mount_uploader :image, ImageUploader 
    validates :image, presence: true 
    #validates :article_id, presence: true 
end 

articles .schema

CREATE TABLE "articles" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
"content" varchar(255), 
"user_id" integer, 
"created_at" datetime, 
"updated_at" datetime,); 

photos de .schema

CREATE TABLE "photos" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
"article_id" integer, 
"image" varchar(255), 
"created_at" datetime, 
"updated_at" datetime); 

de users_controller.rb

class UsersController < ApplicationController 
    . 
    . 
    def show 
    @user = User.find(params[:id]) 
    @articles = @user.articles.paginate(page: params[:page]) 
    end 
    . 
    . 
end 

de articles_controller.rb

class ArticlesController < ApplicationController 
    . 
    . 
    def new 
    @article = Article.new 
    @article.photos.build 
    . 
    . 
    end 

    def create 
    @article = current_user.articles.build(article_params) 
    . 
    . 
    end 

    def edit 
    @article = Article.find(params[:id]) 
    end 

    def update 
    @article = Article.find(params[:id]) 
    if @article.update(article_params) 
     redirect_to current_user 
    else 
     render 'edit' 
    end 
    end 
    . 
    . 
    private 

    def article_params 
     params.require(:article).permit(:content, photos_attributes: [:id, :article_id, :image]) 
    end 
    . 
    . 
end 

utilisateurs \ show.html.erb

. 
    . 
<div class="row"> 
     <%= render @articles %> 
</div> 
    . 
    . 

articles \ _article.html.erb

Je voudrais afficher l'image téléchargée ici

<li> 
    . 
    . 
    #Please let me know how to display image here... 
    <span class="content"><%= article.content %></span> 
    . 
    . 
</li> 
+0

double possible de [Rails4: Comment afficher et éditer le fichier téléchargé à l'aide carrierwave] (http://stackoverflow.com/questions/24583489/rails4-how-do-i-display-and-edit-upload-fichier-using-carrierwave) – sevenseacat

+0

Je suppose que cela pourrait fonctionner '@articles.photos.each do | photo | <% = photo.image%> ' – Pavan

+0

Merci pour votre commentaire, Pavan. Bien que j'ai ajouté '<% @ articles.photos.each faire | photo | %> ',' <% = photo.image%> 'et' <% end %> ', ** NoMethodError dans les utilisateurs # show **, méthode non définie 'photos' pour # apparu à' <% @ articles.photos.each faire | photo | %> '. – SamuraiBlue

Répondre

0

Je ne comprends pas pourquoi c'est un problème. Apparemment, vous utilisez Carrierwave pour télécharger des images. Si vous lisez sa documentation, vous constaterez qu'il est assez simple d'obtenir l'URL de l'image et de l'afficher sur une page. Vous aurez besoin du image_tag pour le faire.

Pour afficher l'image dans articles\_article.html.erb, vous pouvez le faire:

<li> 
    . 
    . 
    #Please let me know how to display image here... 
    <span class="content"><%= article.content %></span> 

    <% article.photos.each do |photo| %> 
    <span class="image"><%= image_tag(photo.image_url) if photo.image? %></span> 
    <% end %> 
    . 
    . 
</li> 
+0

Merci San. Je peux afficher des images. Mes excuses pour la question des débutants. – SamuraiBlue

Questions connexes