2017-08-20 6 views
0

Es könnte wie eine Neuling Frage aussehen, aber ich kann mich nicht darum kümmern. Rails sagt mir, dass die Methode nicht definiert ist, auch wenn ich in der Konsole darauf zugreifen kann. Mir fehlt offensichtlich etwas ...NoMethodError in Controller # show - Verschachteltes Modell

Hier ist meine routes.rb Datei:

Rails.application.routes.draw do 

    root 'static_pages#home' 
    resources :users do 
    resources :bodies 
    end 
end 

Hier wird die User-Modell

class User < ApplicationRecord 
    has_many :bodies, dependent: :destroy 
end 

Hier ist der Körper Modell

class Body < ApplicationRecord 
    belongs_to :user 
end 

Hier ist der Bodies Controller

class BodiesController < ApplicationController 

    def new 
     @user = User.find(params[:user_id]) 
     @body = @user.bodies.new 
    end 

    def create 
    @body = current_user.bodies.build(body_params) 
     if @body.save 
     redirect_to user_body_path(@body) 
     else 
     render 'new' 
     end 
    end 

    def show 
    @user = User.find(params[:user_id]) 
    @body = @user.bodies(params[:id]) 
    end 

    def index 
    @bodies = Body.all 
    end 
private 

    def body_params 
    params.require(:body).permit(:weight, :sex, :age, :fat) 
    end 

end 

Die Erstellungsaktion funktioniert einwandfrei. Ich kämpfe nur die Show-Aktion zu erhalten zu arbeiten, obwohl die richtigen Parameter entlang geführt werden:

Showing /Users/rodolphegeant/code/FFL/app/views/bodies/show.html.erb where line #9 raised: 

undefined method `sex' for #<Body::ActiveRecord_Associations_CollectionProxy:0x007f820f65da90> 
Did you mean? send 
Extracted source (around line #9): 
7 
8 
9 
10 
11 
12 

Hello from my Body 

<%= @body.sex %> | <%= @body.age %> | <%= @body.weight %> | <%= @body.fat %> 




Rails.root: /Users/rodolphegeant/code/FFL 

Application Trace | Framework Trace | Full Trace 
app/views/bodies/show.html.erb:9:in `_app_views_bodies_show_html_erb___2597620731841156962_70098290142700' 
Request 

Parameters: 

{"user_id"=>"1", "id"=>"3"} 

Wenn ich an die Konsole gehe I @ body.sex oder @ body.age oder ein anderes Verfahren ausgeführt werden kann, dass entspricht den Attributen, die ich suche ....

Vielen Dank im Voraus für die Hilfe bei der Lösung dieses Problems.

Codingly Ihnen,

Rodolphe

Antwort

0

sollten Sie Abfrage auf Datensätze, laufen die von der Verbindung mit Benutzermodell zurück.

def show 
    @user = User.find(params[:user_id]) 
    @body = @user.bodies.find(params[:id]) 
end 
+0

Ja perfekt! Danke Ahmed :) –

0

HALLO in show-Aktion in Ihrem Controller ersetzen @user.bodies(params[:id]) durch Body.find(params[:id])

+0

Das funktioniert gut. Leider kann ich nur für eine Lösung stimmen. Die andere Lösung unten funktioniert auch, es ergibt für mich nur semantisch mehr Sinn. Ich möchte Ihnen jedoch für Ihre Hilfe danken. –

Verwandte Themen