У меня есть форма, которая в данный момент не обновляется. Сообщение об ошибке:
NoMethodError (неопределенный метод `update 'для nil: NilClass):
В консоли у меня есть:
Completed 500 Internal Server Error
Контроллер
def edit
@coffeeshop = Coffeeshop.find(params[:id])
end
def update
respond_to do |format|
if @coffeeshop.update(coffeeshop_params)
format.html { redirect_to @coffeeshop, notice: 'Coffeeshop was successfully updated.' }
format.json { render :show, status: :ok, location: @coffeeshop }
else
format.html { render :edit }
format.json { render json: @coffeeshop.errors, status: :unprocessable_entity }
end
end
end
...
private
def coffeeshop_params
params.require(:coffeeshop).permit(:roaster_id, :name, :desc, :area, :url, :email, :address, :postcode, :locale, :phone, :image_path, :image_thumb_path, :snippet, :beans, :long_black, :tag_list, :slug, :id, :image)
end
_form
<%= form_with(model: @coffeeshop, local: true) do |form| %>
<% if @coffeeshop.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@coffeeshop.errors.count, "error") %> prohibited this coffee_bean from being saved:</h2>
<ul>
<% @coffeeshop.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<form>
<div class="form-group">
<%= form.label :name %><br />
<%= form.text_field :name, class: "form-control" %>
</div>
<br />
<div class="form-group">
<%= form.label :snippet %><br />
<%= form.text_field :snippet, class: "form-control" %>
</div>
<br />
<div class="form-group">
<%= form.label :Description %><br />
<%= form.text_area :desc, rows:8, class: "form-control" %>
</div>
<br />
<div class="form-group">
<%= form.label :Locale %><br />
<%= form.text_field :locale, class: "form-control" %>
</div>
<br />
<div class="form-group">
<%= form.label :Area %><br />
<%= form.text_field :area, class: "form-control" %>
</div>
<br />
<div class="form-group">
<%= form.label :Website %><br />
<%= form.url_field :url, class: "form-control" %>
</div>
<br />
<div class="form-group">
<%= form.label :Email %><br />
<%= form.email_field :email, class: "form-control" %>
</div>
<br />
<div class="form-group">
<%= form.label :Address %><br />
<%= form.text_field :address, class: "form-control" %>
</div>
<br />
<div class="form-group">
<%= form.label :Postcode %><br />
<%= form.email_field :postcode, class: "form-control" %>
</div>
<br />
<div class="form-group">
<%= form.label :Phone %><br />
<%= form.telephone_field :phone, class: "form-control" %>
</div>
<br />
<div class="form-group">
<%= form.label :Image %><br />
<%= form.text_field :image_path, class: "form-control"%>
</div>
<br />
<div class="form-group">
<%= form.label :Thumbnail %><br />
<%= form.text_field :image_thumb_path, class: "form-control" %>
</div>
<br />
<div class="form-group">
<%= form.label :Roaster %><br />
<%= form.collection_select(:roaster_id, Roaster.order(:roaster_name), :roaster_id, :roaster_name, :prompt => 'Select Roaster', class: "form-control") %>
</div>
<br />
<div class="form-group">
<%= form.label :Price_of_a_long_black %><br />
<%= form.number_field :long_black, class: "form-control" %>
</div>
<br />
<div class="form-group">
<%= form.submit "Submit", class: "btn btn-primary" %>
</div>
</form>
<% end %>
Форма использует collection_select для извлечения значений из roasters.rb
модели, где:
class Coffeeshop < ApplicationRecord
belongs_to :roaster
и
class Roaster < ApplicationRecord
has_many :coffeeshops
Есть причина, почему это не экономит?
Я также не могу создать новую запись, где я могу сообщить об ошибке roaster must exist
?