2017-10-12 4 views
0

J'ai deux modèles. Le premier est Taxirecord et le second est Carpark. Chaque Taxirecord peut avoir son propre parking. J'ai un problème avec la transmission de taxirecord_id au dossier Carpark. J'ai la routeRuby on Rails - Identifiant de passe d'un autre contrôleur

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

Et je veux passer: taxirecord_id, qui est id taxirecord que l'édition im, à mon contrôleur créer. Mon modèle de parking:

class Carpark < ActiveRecord::Base 
    belongs_to :taxirecord 
end 

dans le contrôleur im trouver taxirecord_id par fonction de recherche basée sur param: taxirecord_id, mais id est nul quand créer est appelée. Pouvez-vous s'il vous plaît m'aider à trouver ce que je fais mal et comment puis-je résoudre ce problème? Merci pour toute aide!

Mon contrôleur de parking

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

Que contient votre contrôleur? et comment faites-vous la demande à cette route? –

+0

S'il vous plaît ** montrez votre code complet **, pas seulement une description de votre code. Je suppose que le problème est que vous n'appelez pas «permis» avec les attributs nécessaires, mais je suis incapable de répondre correctement à votre question sans voir le code! –

+0

Je ne crois pas qu'il soit possible de comprendre ce que vous voulez dire ici. Vous devez décrire ce que vous désirez un peu mieux. Montrer plus de code aiderait probablement. Peut-être aussi un cas avant et après. – kaspernj

Répondre

0

Je reçois enfin fonctionner Ive a ajouté <%=link_to 'New Carpark', {:controller => "carparks", :action => "new", :taxirecord_id => @taxi_record.id }%> à ma forme de taxirecord et parking sous forme <%= hidden_field_tag :taxirecord_id, params[:taxirecord_id] %> et à mon contrôleur de parking: @carpark.taxirecord_id = params[:taxirecord_id] Merci à tous pour un grand soutien et hel p!

+0

Heureux que ça marche - jetez un coup d'oeil à Rails de routage (http://guides.rubyonrails.org/routing.html) pour le format de lien - il y aura être une route générée automatiquement que vous pouvez utiliser dans le champ 'link_to' qui est l'approche conventionnelle. Si vous avez le temps, jouez avec ma réponse - personnellement je pense que c'est la façon de faire de Railsy :) Aussi, si votre champ caché fonctionne comme il se doit, vous devriez être en mesure d'utiliser ' carpark_params' pour le transmettre, sans la ligne supplémentaire qui l'affecte. Bonne chance avec le reste du projet! – SRack

+0

Enfin, je ne sais pas pourquoi quelqu'un est en train de voter votre question - +1 de moi :) – SRack

+0

Merci beaucoup @SRack. J'apprécie vraiment votre soutien et votre aide! :) –

0

Je penche vers utiliser quelque chose comme:

before_action :assign_taxirecord 

... 

private 

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

Et puis dans l'action create:

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

De toute évidence, il y a un peu de couture nécessaire à vos exigences (c'est à dire pour quelles actions le before_action est appelé), mais j'espère que aide!

+0

Merci beaucoup, je vais y jeter un oeil :) –

+0

Bienvenue! J'ai noté cela de la mémoire, et je crois que la méthode 'build_carpark' est créée automatiquement dans une méthode has_one/belongs_to. Si ce n'est pas le cas, ont un chaudronnier/s'il vous plaît laissez-moi savoir :) – SRack

0

Inutile d'envoyer l'identifiant du taxirecord. Il suffit de faire comme ce

classe Carpark < ApplicationRecord belongs_to: taxirecord fin

classe Taxirecord < ApplicationRecord has_one: parking fin

Rails.application.routes.draw do ressources: taxirecords font ressources: parkings fin fin

puis faire pour les nouveaux taxirecord t = Taxirecord.new (: inscription => "EFGH",: description => "test")

pour le nouveau parking t.create_carpark (: description => "ABCD")

=> #

+0

Pourquoi il ne peut pas être comme ceci: formulaire de modification Taxirecord: '<% = link_to 'Nouveau Carpark', new_carpark_path (@taxi_record)%>' et dans Carpark Controller '@carpark.taxirecord_id = @ taxi_record.id' ? Merci! –

+0

Veuillez coller vos contrôleurs de modèles et routes code –

+0

ajouter taxirecord_id dans carpark_params 1er –