Ich baue einen einfachen Rezensenten Blog Post auf Schienen 5, um mich selbst zu unterrichten. Es ist ein Video Game Reviewer, wo Benutzer Bewertungen über die letzten Spiele, die sie gespielt haben, schreiben können. Benutzer können Kommentare auch zu Bewertungen hinzufügen.Benutzerdefinierte Attribut-Setter-Methode in geschachtelten Formularen
Ich möchte einen benutzerdefinierten Attribut-Writer auf meinem Spielmodell durch verschachtelte Formulare implementieren. Wenn ein Benutzer ein Spiel zum ersten Mal auflistet, möchte ich auch, dass er in der Lage ist, eine Rezension für dieses Spiel vor Ort zu schreiben.
Game.rb
class Game < ApplicationRecord
has_many :reviews, dependent: :destroy
has_many :users, through: :reviews
validates :title, presence: true
def reviews_attributes=(reviews_attributes)
reviews_attributes.values.each do |review_attributes|
self.reviews.build(review_attributes)
end
end
end
Spiele/new.html.erb
<h1>Enter a new Game</h1>
<%= form_for @game do |f| %>
<%= render 'shared/error_messages', object: @game %>
<%= render 'new_form', f: f %>
<br><br>
Review:
<br>
<%= f.fields_for :reviews, @game.reviews.build do |r| %>
<%= render 'reviews/form', f: r %>
<%= f.submit "Add Game and/or Review!" %>
<% end %>
<% end %>
Bewertungen/form Teil
<%= f.label :title %>
<%= f.text_field :title %>
<br>
<%= f.label :content %>
<%= f.text_area :content %>
<br>
<%= f.label :score %>
<%= f.text_field :score %>
<%= f.hidden_field :user_id, :value => current_user.id %>
Games_Controller.rb
def create
@game = Game.new(game_params)
if @game.save
redirect_to @game
else
render :new
end
end
private
def game_params
params.require(:game).permit(:title, :platform, reviews_attributes: [:rating, :content, :user_id])
end
Aus irgendeinem Grunde halte ich Bewertungen immer ungültig ist, wenn ich versuche, eine neue Bewertung mit einem Spiel durch meine verschachtelten Formen assoziiert zu erstellen. Meine error_messages partially rendert die Fehlermeldung: "1 Fehler hat das Speichern verhindert: Reviews ist ungültig".
Etwas über die Überprüfung Formulare oder Daten in der Params-Hash wird nicht übertragen, denke ich. Ich bin mir nicht sicher warum. Ich habe sogar versucht, die Assoziationen mit dem eingebauten Rails-Helper zu erstellen: accresents_nested_attributes_for und ich bekomme immer noch den gleichen Fehler. Hier
ist der Link zu meinem Repo für volle Klarheit: https://github.com/jchu4483/Rails-Assessment-
Danke, und jede Hilfe oder Beratung wird geschätzt.
Versuchen Sie '' id' zu 'reviews_attributes' in Ihren starken params hinzuzufügen:' reviews_attributes: [: id,: rating,: content,: user_id] ' – Ren
Ich habe es gerade versucht und es gibt mir den gleichen Fehler. –