2011-04-20 2 views
0
class Task < ActiveRecord::Base 
    has_many :notes, :as => :notable, :dependent => :destroy 
    has_many :work_times, :dependent => :destroy 
end 

class WorkTime < ActiveRecord::Base 
    belongs_to :task 
end 


class NotesController < ApplicationController 


     end 
    end 
#### 

Toute aide s'il vous plaît ??Comment passer la valeur du contrôleur au modèle?

+1

Il ressemble à votre « quelque chose comme » est la bonne réponse. Quel est le problème avec ça? –

+0

C'est ce que j'obtiens méthode indéfinie 'work_time 'pour # . Je reçois la date mais la dernière ligne du code * work_time.start_time == time donne une erreur. – user659068

Répondre

1

Puisque la relation est un has_many vous devez travailler avec un moment donné, et non l'ensemble:

work_time = @task.work_times.last 
work_time.start_time = Time.now 
work_time.save! 

Dans ce cas, le dernier enregistrement du temps de travail est sélectionné et manipulé. Peut-être que vous voulez utiliser le premier ou le sélectionner avec une condition:

work_time = @task.work_times.where(:active => true).first 

Il y a beaucoup de façons de sélectionner l'enregistrement correct de manipuler, mais votre question est un peu vague.

Si vous cherchez à créer une nouvelle entrée au lieu de modifier un, vous pouvez le faire:

@task.work_times.create(:start_time => Time.now) 

Ceci est qu'exercer la relation modèle ActiveRecord.

1

Vous obtenez simplement l'objet et il suffit de changer sa valeur comme:

user = User.first 
user.username = 'changed_name' 
user.save # and save it if you want 

Mais, ce code est en fait qui appartient à un modèle et doit être enveloppé par une méthode de modèle.

+0

Soory Je suis nouveau à Ruby Rails Je ne comprends pas, Qu'est-ce que vous me demandez exactement de faire ?? Mon code fonctionne et je peux obtenir une date. Tout ce dont j'ai besoin pour passer cette date dans l'attribut start_time dans le modèle worktime – user659068

+0

Le modèle WorkTime est une classe à part. Start_time est un attribut d'un objet particulier de cette classe. Donc, si vous avez un objet comme 'work_time = WorkTime.find (2)', vous pouvez faire work_time.start_time sur cet objet, afin de changer la valeur. En bref, vous devez d'abord créer un objet de type WorkTime, puis vous pouvez définir n'importe quelle valeur. – Spyros

+0

Ouais je l'ai eu, mais workTime est aussi un problème en suspens pour moi, je veux remplir task_id dans la table work_times sur la création d'une tâche qui génère lors de la création d'un registrar. En ce moment ma table de work_times est vide – user659068

1

Comme mentionné dans quelques autres réponses, vous avez besoin d'un objet de type WorkTime pour transmettre la valeur.

Du code que vous avez posté, il ne semble pas que vous ayez une telle instance. Vous pouvez en trouver un (WorkTime.find ..) ou en créer un nouveau (WorkTime.new ..)

Il semble que vous ayez une instance de note (@note), même si je ne suis pas sûr d'où cela est venu .. vous pourriez être en mesure d'aller chercher des objets appropriés à l'aide WorkTime:

@note.task.work_times 

ou le premier de ceux-ci avec:

@note.task.work_times.first 
Questions connexes