2010-07-09 3 views
4

J'utilise un formulaire pour ajouter une entrée, et j'ai besoin d'envoyer l'identifiant de l'utilisateur courant avec les paramètres d'entrée. Voici ma forme de code:RoR form_for: Le champ masqué n'est pas inclus dans le paramètre d'objet et ne fonctionne donc pas.

<% form_for(@entry) do |f| %> 
    <%= f.error_messages %> 
<%= hidden_field_tag 'user_id', current_user.id %> 
    <p> 
    <%= f.label :date %><br /> 
    <%= f.date_select :date %> 
    </p> 
    <p> 
    <%= f.label :note %><br /> 
    <%= f.text_field :note %> 
    </p> 
    <p> 
    <%= f.submit 'Create' %> 
    </p> 
<% end %> 

Le problème est que user_id est en cours d'enregistrement comme nul. J'ai remarqué dans la sortie de la console ci-dessous que user_id est présent, mais il n'est pas réellement situé dans les paramètres d'objet d'entrée. Comment puis-je réparer cela? Merci d'avoir lu.

Processing EntriesController#create (for 127.0.0.1 at 2010-07-09 19:57:55) [POST] 
    Parameters: {"commit"=>"Create", "action"=>"create", "user_id"=>"3", "entry"=>{"date(1i)"=>"2010", "date(2i)"=>"7", "date(3i)"=>"9", "note"=>"bb"}, "controller"=>"entries"} 
    Entry Create (0.4ms) INSERT INTO "entries" ("entry_id", "created_at", "updated_at", "date", "user_id", "note") VALUES(NULL, '2010-07-09 09:57:55', '2010-07-09 09:57:55', '2010-07-09', NULL, 'bb') 
Redirected to http://localhost:3000/entries/7 
Completed in 24ms (DB: 0) | 302 Found [http://localhost/entries] 

Répondre

16

UTILISATION

<%= f.hidden_field :user_id, current_user.id %> 

PLUTÔT DE

<%= hidden_field_tag 'user_id', current_user.id %> 

Explaination: - Dans contrôleur probablement vous faire quelque chose comme follwing

@entry = Entry.new(params[:entry]) 
@entry.save #But there is no params[:entry][:user_id] so null is getting saved 

Vous avez donc à l'un des fol meuglement (othere d'un i mentionné ci-dessus)

@entry = Entry.new(params[:entry]) 
@entry.user_id= params[:user_id] 
@entry.save 

ou

<%= hidden_field_tag 'entry[user_id]', current_user.id %> 
+14

Je sais que c'est vieux, mais je voulais simplement mettre à jour votre réponse car il ne semble pas fonctionner pour Rails 3.0. 7. Je recevais une erreur liée à la fusion, donc j'ai dû google quelques endroits pour trouver ceci: '<% = f.hidden_field: user_id,: value => current_user.id%>' –

+1

@EricHu - vous devriez soumettre votre commenter comme une réponse, chaque fois que j'ai besoin de faire cela, je me réfère à votre commentaire! – DaveStephens

+0

@RiPuk Fait! J'espère que cela t'aides! –

1

comprennent le champ caché avec le formulaire générateur objet 'f'

f.hidden_field: user_id, current_user. id

19

Les autres réponses sont écrites pour Rails 2. L'adaptation de Rails 3 de La réponse de Salil utilise ce format:

<%= f.hidden_field :user_id, :value => current_user.id %> 
+1

Cela devrait être la réponse acceptée, le plus voté est maintenant périmé. – DaveStephens

7

Pour Rails 4 Utilisation:

<%= f.hidden_field :user_id, value: current_user.id %> 
Questions connexes