2017-08-19 1 views
0

Je suis nouveau dans le développement RoR et je suis un peu confus sur la façon dont les paramètres passent d'une vue HTML à l'automate. Je l'ai vu quelques exemples en ligne qui utilisent une méthode privée comme ceci:Passage de paramètres de la forme au contrôleur en utilisant RoR

private 
def message_params 
    params.require(:message).permit(:content) 
end 

je cherche des éclaircissements en ligne à ce que cette méthode fait et comment cela fonctionne, mais je rencontre seulement messages/articles utilisant les la méthode plutôt que d'expliquer ce qu'il fait. J'espérais que quelqu'un puisse expliquer comment la méthode prend (/ filtre?) Les valeurs passées via le formulaire via une requête POST, ce que signifient les mots clés require et permit et comment changer cette méthode pour l'adapter à mon propre usage.

Par exemple, si je devais obtenir des données sur un nouveau livre que je ferais ceci:

private 
    def book_params 
     params.require(:book_name).require(:ISBN).require(:Author).permit(:Illustrator) 
    end 

Est-ce que ci-dessus valable étant donné que mon objet livre a ces champs?

Toute précision serait appréciée.

Merci.

+1

regard Takena à [paramètres forts] (http: // edgeguides .rubyonrails.org/action_controller_overview.html # strong-parameters). – Gerry

Répondre

0

quelques informations ici (I utilisez votre exemple de modèle Book et BookController), cela peut probablement vous aider à mieux comprendre

lorsque vous soumettez un formulaire, rails automatiquement appelés create method, à l'intérieur de create method vous verrez Book.new (book_params), book_params appellera private méthode et vérifiera quel champ a permis, s'il y a un autre domaine qui a soumis mais ne figure pas dans votre bloc de permis, alors il ne sera pas transmis à commande save

class BooksController < ApplicationController 

    def create 
    @book = Book.new(book_params) 
    if @book.save 
     flash[:success] = 'Data save successfully' 
     redirect_to books_path 
    else 
     render :new 
    end  
    end 

private 

    def book_params 
    params.require(:book).permit(
     :book_name, 
     :isbn, 
     :author, 
     :illustrator) 
    end 

end 
+0

Merci beaucoup. Une question ai-je raison de supposer que la méthode .require() prend l'objet comme paramètre et la méthode .permit prend les champs comme paramètres? –

+0

oui correct comme vous le voyez de ma réponse, l'objet est livre et le champ sont permis à l'intérieur – widjajayd

0

Ce type de fonction est utilisée pour la liste blanche params - c.-à-dire que vous avez un modèle de message, et par les actions du contrôleur vous ne devriez être en mesure de modifier le contenu. Peut-être y a-t-il aussi un champ d'auteur - mais même si quelqu'un devait le passer à travers le formulaire, vous ne voudriez pas le mettre à jour.

params.require(:message) 

Retourne à vos paramètres [: message]. permis signifie que vous autorisez uniquement le champ de contenu.

Voir: http://edgeguides.rubyonrails.org/action_controller_overview.html#strong-parameters

je besoin de voir la configuration de votre modèle, mais je suppose donné un modèle de livre que vous voulez quelque chose de plus semblable à:

params.require(:book).permit(:illustrator, :author, :isbn)