2010-01-31 7 views
1

Je travaille sur une application Rails où une classe d'utilisateurs nommée (les soumissionnaires) peut se connecter et une fois qu'ils sont connectés, ils créent des vidéos. Mon contrôleur de vidéos est ici:Objets liés à leur créateur Question

class VideosController < ApplicationController 
    def index 
    @videos = Video.find :all 

    end 

    def new 
    @submitter = current_submitter 
    @video = @submitter.videos.build 
    end 

    def create 
    @submitter = current_submitter 
    @video = @submitter.videos.build(params[:video]) 
    if @video.save 
     @video.convert 
     flash[:notice] = 'Video has been uploaded' 
     redirect_to :action => 'index' 
    else 
     render :action => 'new' 
    end 
    end 

    def show 
    @video = Video.find(params[:id]) 
    end 

def destroy 
    @video = Video.find(params[:id]) 
    @video.destroy 
    flash[:notice] = "Successfully deleted the video." 
    redirect_to root_url 
    end 

    def update_date 
    @video = Video.find(params[:id]) 
    @video.update_attributes(params[:video]) 
     flash[:notice] = "Successfully added a launch date!" 
    redirect_to @video 


    end 
end 

Comme vous pouvez le voir, je suis en train de construire le contrôleur de sorte que lorsqu'une vidéo est créée, il est créé comme appartenant à l'auteur qui téléchargent la vidéo (via la vidéo nouvelle vue). J'utilise un système d'authentification avec une méthode current_submitter écrite dans le contrôleur d'application.

Maintenant, il me permet de télécharger une vidéo bien lorsque je suis connecté en tant que demandeur. Le problème pour moi est de savoir comment afficher les informations à mon avis. Si je veux afficher des colonnes avec des informations sur la vidéo et d'autres avec des informations sur l'émetteur qui a téléchargé la vidéo, comment puis-je faire cela à partir du contrôleur (action d'index), dans la vue d'index. Mon point de vue actuel qui ne fonctionne pas en dessous:

<% title "Films Submitted" %> 

<table> 
    <tr> 
    <th>Title</th> 
    <th>Film Type</th> 
    <th>Premiere</th> 
    <th>Company</th> 
    <th>Name</th> 

    </tr> 
    <% for video in @videos do %> 
    <tr> 
     <td><%= link_to video.title, video %></td> 
     <td><%= video.film_type %></td> 
    <% if video.premiere == "true" %> 
     <td>Premiere</td> 
    <% else %> 
     <td><%= %></td> 
    <% end %> 
     <td><%= video.submitter.company %></td> 
     <td><%= video.submitter.name %></td> 
     <td><%= link_to "Delete", video, :confirm => 'Are you sure?', :method => :delete %></td> 
    </tr> 
    <% end %> 
</table> 
<br><br> 
<%= link_to "Upload a Video", new_video_path %> 

Toutes les suggestions ou conseils des rails développeurs seraient beaucoup apprécié ... Je suis nouveau et essayer d'apprendre.

Modèle vidéo:

class Video < ActiveRecord::Base 
belongs_to :submitter 
    has_attachment :content_type => :video, 
       :storage => :file_system, 
       :max_size => 50.megabytes 


end 

Déposant Modèle:

class Submitter < ActiveRecord::Base 

    acts_as_authentic 

has_many :videos 

end 

Schéma:

create_table "videos", :force => true do |t| 
    t.string "title" 
    t.text  "description" 
    t.string "state" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.string "content_type" 
    t.integer "size" 
    t.string "filename" 
    t.string "film_type" 
    t.boolean "premiere",  :default => false 
    t.date  "preferred_date" 
    t.text  "reason" 
    t.integer "submitter_id" 
    t.date  "actual_date" 
    end 

    create_table "submitters", :force => true do |t| 
    t.string "name" 
    t.string "company" 
    t.string "email" 
    t.string "username" 
    t.string "crypted_password" 
    t.string "password_salt" 
    t.string "persistence_token" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.integer "video_id" 
    end 
+1

Lorsque vous dites que cela ne fonctionne pas, que se passe-t-il? Avez-vous un message d'erreur? – mikej

+0

Désolé, mon mauvais ... oui je reçois ce qui suit: undefined la méthode 'company 'pour nil: NilClass –

Répondre

0

Je pense que vous avez probablement la configuration que vos associations dans une direction. Vous avez déjà:

class Submitter < ActiveRecord::Base 
    has_many :videos 
end 

Mais il faut aussi rendre cette relation dans le modèle vidéo:

class Video < ActiveRecord::Base 
    belongs_to :submitter 
end 

Cela va créer la méthode submitter dans votre modèle vidéo, qui fait référence à l'Déposant il appartient.

MISE À JOUR:

Après avoir mis à jour votre question avec les informations de modèle, j'ai remarqué une petite chose: Vous avez une colonne de video_id sur votre table de Submitters qui n'a pas besoin d'être là. Seul le côté "belongs_to" de l'association a besoin d'une clé étrangère. Mais cela ne cause pas votre problème.

Je pense que vous pourriez avoir une vidéo dans votre base de données sans un soumis! Dans l'action d'index, puisque vous ne vérifiez pas un émetteur valide avant de commencer à l'utiliser, si même un seul enregistrement vidéo ne contient pas un attribut submitter_id, il va interrompre la vue.

+0

J'ai la configuration de l'association à droite :(Je viens de vérifier à deux fois –

+0

Pas de problème, s'il vous plaît envoyer le code de la vidéo et les modèles de soumission (vous pouvez réduire, mais les noms de classe et les associations sont la partie importante) et aussi les clips de votre db/schema.rb qui définissent les tables de vidéos et de soumissionnaires Je suis sûr que la réponse est dans ceux-ci: –

+0

Ok, je viens de mettre à jour le post, je vous remercie de votre aide, j'ai peaufiné le modèle vidéo ...le reste est la logique de conversion vidéo, ne devrait pas être pertinent. Faites-moi savoir si vous avez besoin d'autre chose! –