Benutzer einen Beitrag erstellen und an einer seiner Sammlungen (post belongs_to Sammlung) zuweisenRails 4 params Validierung
Ich habe eine Arbeits Drop-Down, die von der aktuellen Gruppe objekt Benutzer lesen, würde ich jedoch Benutzer vermeiden möchten (Angreifer) übergeben falsche Parameter wie collection_id zu falschem Benutzer gehört.
Ich getestet mit einem text_field und zuweisen collection_id von falschen Benutzer und Post gespeichert, das ist, was ich verhindern möchte.
Wie kann ich das tun?
1) Innerhalb der Business-Schicht. (Ich denke, Validierung innerhalb Modell)
2) innerhalb des DB-Schicht (einige db Constraints)
3) bevorzugt, beide
Anmerkung: Ich muss vorfüllen Form mit einigen Variablen aus dem vorhergehenden Schritt, dann kann der Benutzer oder für den Fall, füllen ändern sie
post_controller.rb leer sind:
@post = current_user.posts.build(url: @url, content: @title)
def post_params
params.require(:post).permit(:content, :url, :collection_id)
end
Modelle:
collection.rb:
belongs_to :user
has_many :posts
user.rb:
has_many :posts
has_many :collections
post.rb:
belongs_to :user
belongs_to :collection
Routen:
post 'post' => 'posts#create'
Form:
<%= form_for(@post, html: { multipart: true }) do |f| %>
<%= f.hidden_field :url %>
<%= f.text_field :content %>
<%#= f.text_field :collection_id %> # This to test passing incorrect values
<%= f.collection_select :collection_id, Collection.order(:id),:id,:title, include_blank: true %>
<%= f.submit "Post", class: "btn btn-primary" %>
<% end %>
Die Werte aus der Form gehen post_controller # erstellen
Wo ist 'post_params' und genauer gesagt das Ergebnis, dass Ihr' collection_select' in Ihrem Controller verwendet wird? –
das Ergebnis von Ihrer Sammlung_select gehen Sie zu post_controller # erstellen –