Rails 4 の基本的な scaffolded アプリケーションがあり、routes.rb は次のようになります。
scope ':username' do
resources :recipes
end
次に、コントローラーの作成アクションと更新アクションを次のようにします。
def update
respond_to do |format|
if @recipe.update(recipe_params)
format.html { redirect_to @recipe, notice: 'Recipe was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: 'edit' }
format.json { render json: @recipe.errors, status: :unprocessable_entity }
end
end
end
次に作成します:
def create
@recipe = Recipe.new(recipe_params)
@recipe.user = current_user.id
respond_to do |format|
if @recipe.save
format.html { redirect_to @recipe, notice: 'Recipe was successfully created.' }
format.json { render action: 'show', status: :created, location: @recipe }
else
format.html { render action: 'new' }
format.json { render json: @recipe.errors, status: :unprocessable_entity }
end
end
end
次のエラーが表示されます。
ActionController::UrlGenerationError in Recipes#edit
行番号 1 が発生した app/views/recipes/_form.html.erb を表示:
No route matches {:action=>"show", :controller=>"recipes", :username=>#<Recipe id: 9, name: "jdsafkd", yield: "", description: "", duration: "", author: "", url: "", user: 6, image: "", created_at: "2013-07-09 18:07:50", updated_at: "2013-07-09 18:07:50">, :id=>nil, :format=>nil} missing required keys: [:id]
部分的なフォームは次のとおりです。
<%= form_for(@recipe) do |f| %>
<% if @recipe.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@recipe.errors.count, "error") %> prohibited this recipe from being saved:</h2>
<ul>
<% @recipe.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :image %><br>
<%= f.text_field :image %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
そのため、リダイレクトによって UrlGeneration エラーが発生しているように見えますが、その理由はわかりません。
助けてくれてありがとう!