0

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 エラーが発生しているように見えますが、その理由はわかりません。

助けてくれてありがとう!

4

1 に答える 1

4

これを作成および更新メソッドに入れます:

redirect_to recipe_path(username: current_user.username, id: @recipe.id), notice: 'Recipe was successfully created.'
于 2013-07-09T22:11:38.450 に答える