0

これは本当に私を悩ませた奇妙なエラーです。まず、いくつかの背景。

config/routes.rb に次のネストされたリソースがあります。

scope :requirements => { :protocol => 'https' } do
    resource :user
    resources :orgs do
        resources :members
        resources :events
        resources :levels
        resources :attendances
    end
    resources :sessions,    :only => [:new, :create, :destroy]
end

次に、 app/controllers/levels_controller.rb に次のものがあります。

def edit
    @org = Org.find(params[:org_id])
    @level = OrgLevel.find(params[:id])
end

def update
    @level = OrgLevel.find(params[:id])
    if @level.update_attributes(params[:level])
        flash[:success] = "Level details updated"
        redirect_to @level
    else
        render 'edit'
    end
end

最後に、app/views/levels/edit.html.erb には次のものがあります。

<% provide(:title, "Edit #{@level.name} for #{@org.name}") %> 
<div class="hero-unit">
    <h2>Edit &quot;<%= @level.name %>&quot; membership level for <%= @org.name %></h2>
    <div class="row">
        <div class="span6 offset3">
            <%= form_for [@org, @level], :url => org_level_path do |f| %>
                <%= render 'shared/error_messages' %>
                <table class="editor">
                    <tr>
                        <td class="label_x">
                            <%= f.label :name %>
                        </td>
                        <td colspan="3">
                            <%= f.text_field :name %>
                        </td>
                    </tr>
                </table>
            <% end %>
        </div>
    </div>
</div>

https://spot-macbook.local/orgs/55/levels/162/editを呼び出した結果は正常ですが、[変更を保存] をクリックするとhttps://spot-macbook.local/orgs/162にリダイレクトされます。 /levels/162および次のエラー:

ActiveRecord::RecordNotFound in LevelsController#show

Couldn't find Org with id=162
Rails.root: /Users/ogod/Projects/rails_projects/nom_de_joye_app

Application Trace | Framework Trace | Full Trace
app/controllers/levels_controller.rb:71:in `correct_user'
Request

Parameters:

{"requirements"=>{"protocol"=>"https"},
 "org_id"=>"162",
 "id"=>"162"}

org_id が「55」ではなく「162」に変更されていることに注意してください。私は何を間違っていますか?

4

1 に答える 1

1

どっ!

この質問を投稿してから 5 秒後に、エラーに気付き、修正しました。

オリジナルには、次の update メソッドがあります。

    redirect_to @level

これは次のようになります。

    redirect_to org_level_path(@org, @level)

このような単純なエラーですが、間違った場所を探していました!

于 2013-03-04T14:11:49.643 に答える