代码之家  ›  专栏  ›  技术社区  ›  jbk

将嵌套参数从create in redirect传递到嵌套控制器的show

  •  1
  • jbk  · 技术社区  · 7 年前

    我有这样一个模式:

    • 公司属于用户(设计)

    我有一个简单的表格,用于使用cocoon创建公司;报价(&A);来自公司控制器中创建操作的员工,所有对象都可以通过创建方法创建。但在上。保存这些对象时,我试图重定向到Quotes#show of the quote create by companysŞcreate,但我无法将quote_id转换到quote 35eShow。

    你能帮我理解如何让正确的参数成功重定向吗?谢谢

    class CompaniesController < ApplicationController
        before_action :authenticate_user!, only: [ :new, :create, :edit, :update, :destroy ]
    
     def new
        @company = Company.new
        @company.quotes.build
        @company.employees.build
      end
    
      def create
        @company = current_user.companies.new(company_params)
        if @company.save
          redirect_to company_quote_url(@company.id), notice: 'Quote request created'
        else
          render :new
        end
      end
    
    private
    
      def company_params
        params.require(:company).permit(:co_name, :co_number, :postcode, :industry,
        :quotes_attributes =>       [:id, :lives_overseas, :payment_frequency],
        :employees_attributes =>    [:id, :first_name, :last_name, :email, :gender, :date_of_birth, :salary, :_destroy] )
      end
    end
    

    class QuotesController < ApplicationController
      def show
        @quote = @company.quotes.find(params)
      end
    end
    

    路线

               quotes_show GET    /quotes/show(.:format)                         quotes#show
                quotes_index GET    /quotes/index(.:format)                        quotes#index
            new_user_session GET    /users/sign_in(.:format)                       devise/sessions#new
                user_session POST   /users/sign_in(.:format)                       devise/sessions#create
        destroy_user_session DELETE /users/sign_out(.:format)                      devise/sessions#destroy
           new_user_password GET    /users/password/new(.:format)                  devise/passwords#new
          edit_user_password GET    /users/password/edit(.:format)                 devise/passwords#edit
               user_password PATCH  /users/password(.:format)                      devise/passwords#update
                             PUT    /users/password(.:format)                      devise/passwords#update
                             POST   /users/password(.:format)                      devise/passwords#create
    cancel_user_registration GET    /users/cancel(.:format)                        devise/registrations#cancel
       new_user_registration GET    /users/sign_up(.:format)                       devise/registrations#new
      edit_user_registration GET    /users/edit(.:format)                          devise/registrations#edit
           user_registration PATCH  /users(.:format)                               devise/registrations#update
                             PUT    /users(.:format)                               devise/registrations#update
                             DELETE /users(.:format)                               devise/registrations#destroy
                             POST   /users(.:format)                               devise/registrations#create
              company_quotes GET    /companies/:company_id/quotes(.:format)        quotes#index
               company_quote GET    /companies/:company_id/quotes/:id(.:format)    quotes#show
           company_employees GET    /companies/:company_id/employees(.:format)     employees#index
            company_employee GET    /companies/:company_id/employees/:id(.:format) employees#show
                   companies GET    /companies(.:format)                           companies#index
                             POST   /companies(.:format)                           companies#create
                 new_company GET    /companies/new(.:format)                       companies#new
                edit_company GET    /companies/:id/edit(.:format)                  companies#edit
                     company GET    /companies/:id(.:format)                       companies#show
                             PATCH  /companies/:id(.:format)                       companies#update
                             PUT    /companies/:id(.:format)                       companies#update
                             DELETE /companies/:id(.:format)                       companies#destroy
                        root GET    /                                              companies#new
    

    No route matches {:action=>"show", :company_id=>65, :controller=>"quotes"} missing required keys: [:id]
    

    redirect_to company_quote_url(company_params)

    No route matches {:action=>"show", "co_name"=>"acme1", "co_number"=>"12345678", :controller=>"quotes",
    
    "employees_attributes"=>{"0"=>{"first_name"=>"brian", "last_name"=>"blessed", "email"=>"brian@test.com", "gender"=>"m", "date_of_birth(1i)"=>"2001", "date_of_birth(2i)"=>"6", "date_of_birth(3i)"=>"28", "salary"=>"10000", "_destroy"=>"false"}}, "industry"=>"financial_services", "postcode"=>"al8 8ba",
    
    "quotes_attributes"=>{"0"=>{"lives_overseas"=>"true", "payment_frequency"=>"annually"}}} missing required keys: [:company_id, :id]
    

    • (参数[:company][:quote\u属性[:id]])
    • (@company.quote.id)

    然而,我似乎做不好,谁能帮我一下吗。谢谢

    1 回复  |  直到 7 年前
        1
  •  1
  •   Pavan Cesar    7 年前

    自从 has_many 引用 ,您应该跟踪 并重定向到报价的显示视图。

    def create
      @company = current_user.companies.new(company_params)
    
      if @company.save
        @quote = @company.quotes.last
        redirect_to company_quote_url(@company,@quote), notice: 'Quote request created'
      else
        render :new
      end
    end
    

    last 借助于 created_at

    quotes#show 像下面一样,它会出错。

    def show
      @company = Company.find(params[:company_id])
      @quote = @company.quotes.find(params[:id])
    end