2017-10-12 24 views
0

私は2つのモデルを持っています。最初はTaxirecord、2番目はCarparkです。各Taxirecordは、独自の駐車場を持つことがあります。私はcarparkレコードにtaxirecord_idを渡すことに問題があります。私はルートを持っていますRuby on Rails - 別のコントローラからのIDを渡す

car_new GET /taxidetail/:taxirecord_id/carpark/new(.:format) carparks#new 

そして、私は渡したいと思っています:taxirecord_id、それは私の作成コントローラであるtaxirecordのidです。 私の駐車場モデル:PARAMに基づいて検索機能によってtaxirecord_idを見つけるコントローライムで

class Carpark < ActiveRecord::Base 
    belongs_to :taxirecord 
end 

:taxirecord_idは、しかし、作成時にidがnilであるが呼び出されます。私が間違ってやっていることを見つけ出すのを手伝ってください。どうすればこの問題を解決できますか?助けてくれてありがとう!

私の駐車場コントローラ

class CarparksController < ApplicationController 
    def new 
      @car = Carpark.new 
    end 
    def create 
      @car = Carpark.new(carpark_params, taxirecord_id: Taxirecord.find(params[:taxirecord_id])) 
      if @car.save 
        flash[:notice] = "Zaznam byl ulozen" 
        redirect_to root_path 
      else 
        flash[:notice] = "Zaznam nebyl ulozen" 
        render 'new' 
      end 

    end 
private def carpark_params 
       params.require(:carpark).permit(:car_brand, :car_type, :driver_name, :driver_tel) 
     end 

end 
+0

あなたのコントローラには何がありますか?あなたはそのルートへのリクエストをどのように実行していますか? –

+0

**コードの説明だけでなく、フルコード**を表示してください。私は、あなたが必要な属性で 'permit'を呼んでいないということが問題だと思っていますが、コードを見ずにあなたの質問に正しく答えることができません! –

+0

私はあなたがここで何を意味するかを理解することは可能であるとは思わない。あなたは、あなたが少し欲しいものを説明する必要があります。より多くのコードを表示することはおそらく役に立ちます。前と後の場合もあるかもしれません。 – kaspernj

答えて

0

:誰もが偉大なサポートとHELのため@carpark.taxirecord_id = params[:taxirecord_id] 感謝をp!

+0

うまくいきました。リンクフォーマットについては、Railsルーティング(http://guides.rubyonrails.org/routing.html)を見てください。あなたが 'link_to'フィールドで使うことができる自動生成されたルートであり、それは従来のアプローチです。 時間があれば私の答えで遊ぶ - 私は個人的にはこれを行うための 'Railsy'の方法だと感じています:) また、隠しフィールドが動作している必要がある場合は、 carpark_params'を渡して、余分な行を割り当てずに渡します。プロジェクトの残りの部分で幸運を祈る! – SRack

+0

最後に、誰かがあなたの質問に投票している理由が分かりません - 私からの+1 :) – SRack

+0

多くの感謝@SRack。私は本当にあなたのサポートと助けに感謝します! :) –

0
私はのようなものを使用した方に傾くだろう

def create 
    @car = @taxirecord.build_carpark(carpark_params) 
    ... 
end 

明らかに必要な少し仕立てがあります:createアクションで、その後

before_action :assign_taxirecord 

... 

private 

def assign_taxirecord 
    @taxirecord = TaxiRecord.find(params[:taxirecord_id]) 
end 

そして、あなたの必要条件(すなわち、before_actionがどのような行動をしているか)に助けて!

+0

多くのありがとう、私はそれを見てイル:) –

+0

ようこそ!私はそれをメモリからメモし、 'build_carpark'メソッドがhas_one/belongs_toメソッドで自動的に作成されると考えています。 Taxirecord編集フォーム:: '<%=のlink_to '新駐車場'、new_carpark_path(@taxi_record)%>' それはケースではない場合は、ティンカー/私に知らせてください:) – SRack

0

タクシールコードを送る必要はありません。ただ、この

クラス駐車場< ApplicationRecord belongs_toのように実行します。taxirecord エンド

クラスTaxirecord < ApplicationRecord にhas_one:taxirecordsは を行います:駐車場 エンド

Rails.application.routes.drawが リソースを行いますリソース:駐車場 end end

、その後、新しいtaxirecord tについて を行う= Taxirecord.new新しい駐車場 t.create_carpark(のための(:登録=> "EFGH"、説明=> "テスト")

:説明=> "ABCD" )

=>#

私は最終的にそれが アイブ氏は私のtaxirecordフォームに <%=link_to 'New Carpark', {:controller => "carparks", :action => "new", :taxirecord_id => @taxi_record.id }%> を追加した仕事とフォーム <%= hidden_field_tag :taxirecord_id, params[:taxirecord_id] %> を駐車場そして、私の駐車場のコントローラにするために取得
+0

、それはこのようなことカントはなぜ持っていますおよび駐車場のコントローラ '@ carpark.taxirecord_id = @ taxi_record.id' ? ありがとう! –

+0

あなたのモデルをペーストしてくださいコントローラとルートコード –

+0

carpark_paramsにtaxirecord_idを追加してください –

関連する問題