1

I possède un modèle de message avec un attribut de groupe de chaînes destinataires. Voici ce que mon messages_controller.rb ressembleComment soumettre un tableau de chaînes dans un formulaire Rails 4.2

def new 
    @message = Message.new 
    @message.attachments = params[:attachments] 
end 
def create 
    @message = Message.new(create_params) 
    @message.user_id = current_user.id 
    @message.attachments = params[:message][:attachments] 
    @message.recipients = params[:message][:recipients] 
    save_message or render 'new' 
end 
private 
    def create_params 
    params.require(:message).permit(:object, :content, 
            :recipients, 
            :attachments) 
    end 

Et le _fields.html.erb ressemble à ceci:

<%= render 'shared/error_messages', object: f.object %> 
<%= f.label :object %> 
<%= f.text_field :object, class: "form-control" %> 
<%= f.label :recipients %> 
<%= f.text_field :recipients, multiple: true, class: "form-control" %> 
<%= f.label :attachments %><br> 
<%= f.file_field :attachments, multiple: true, class: 'form-control' %><br /> 
<%= f.label :content %> 
<%= f.text_area :content, class: "form-control" %> 

Le problème est que est sauve le "tableau" comme celui-ci

["recipient_1, recipient_2"] 

au lieu de

["recipient_1", "recipient_2"] 

Je souhaite être en mesure de récupérer le destinataire [0] = destinataire_1 et non le destinataire [0] = ensemble du tableau C'est probablement quelque chose de simple, mais je ne trouve pas le correctif. Toutes les entrées appréciées. merci

Répondre

2

Il retourne une seule chaîne, car l'entrée est un champ de texte. Si vous voulez utiliser un champ de texte pour cela, attendez simplement que l'entrée soit séparée par des virgules et divise l'entrée:

@message.recipients = params[:message][:recipients].split(',') 

# or, if it's wrapped in an array 
# @message.recipients = params[:message][:recipients][0].split(',') 
0

Généralement pour permit vous lui transmettez une collection de: symboles. Ces clés doivent représenter les valeurs scalaires uniquement. Mais les tableaux sont représentés différemment par un tableau vide.

Essayez ceci:

def create_params 
    params.require(:message).permit(:object, 
            :content, 
            :attachments, 
            recipients: []) 
end 

Et le champ dans votre formulaire:

<%= f.text_field_tag "recipients[]", :recipients, multiple: true, class: "form-control" %> 
+0

merci pour la réponse. J'ai dû l'enrouler autour d'un bloc '{destinataires: []}' et il m'a quand même donné [["recipient_1, recipient_2"]] ' – Ghost

+0

C'est compliqué, mais vous devez en fait mettre des déclarations de tableau à la fin ** * de vos paramètres de permis! Donc, dans le morceau de code ci-dessus, ': attachments' est en train de gâcher des choses, parce que c'est après la déclaration' destinataires'. Ou peut-être qu'ils ont corrigé cela dans la version la plus récente de Rails? –

+0

@CyrilDD Merci pour la capture, je ne le savais pas. – nextstep