Witam
Mam spory problem z zapisaniem wartosci z formularza, którego model odnosi się do asocjacji belongs_to. To tak bardziej dla zobrazowania
Mam dwa modele:
class Machine < ActiveRecord::Base
has_many :machine_notes
end
class MachineNote < ActiveRecord::Base
belongs_to :machine
end
Do tego mam kontrolery machine_notes_controller.rb i machines_controller.rb
W widoku kontrolera machines_controller dla akcji show mam link do dodania notatki (machine_notes)
<%= link_to "Dodaj nową notatkę do maszyny", new_machine_note_path, class: "btn btn-success" %>
Następnie po przejściu do widoku new mam formularz:
<%= form_for [@machine, @machine_note] do |f| %>
<div class="form-group">
<%= f.label :title, "Tytuł notatki" %>
<%= f.text_field :title, class: "form-control" %>
</div>
<div class="form-group">
<%= f.label :body, "Treść notatki" %>
<%= f.text_field :body, class: "form-control" %>
</div>
<%= f.submit "Dodaj maszynę", class: "btn btn-primary" %>
<br>
<%= link_to "Anuluj", machines_path, class: "btn btn-danger" %>
<% end %>
W kontrolerze dla tego formularza mam:
def create
@machine = Machine.find(params[:machine_id])
@machine_note = @machine.machine_notes.new(machine_note_params)
if @machine_note.save
flash[:notice] = "Notatka dodana pomyślnie"
redirect_to machines_path
end
end
private
def machine_note_params
params.require(:machine_note).permit(:machine_id, :title, :body)
end
Niestety po próbie zapisania “notatki” wyskakuje błąd Couldn’t find Machine with ‘id’=
Dodam jeszcze, że w rootsach mam dodane:
resources :machines
resources :machine_notes
A sama baza danych ma takie tabele:
create_table "machine_notes", force: :cascade do |t|
t.string "title"
t.text "body"
t.integer "machine_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "machines", force: :cascade do |t|
t.string "name"
t.string "format_printing"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
Jest ktoś w stanie pomóc i poradzić co robię źle, że kontroler nie czyta z paramsów ID? może źle go podaję?