Controller#show中的NoMethodError - 嵌套模型

时间:2017-08-20 11:08:10

标签: ruby-on-rails-5

它可能看起来像一个新手问题,但我无法理解它。 Rails告诉我,即使我可以在控制台中访问它,也没有定义该方法。我显然错过了一些东西......

这是我的routes.rb文件:

Rails.application.routes.draw do

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

以下是用户模型

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

这是Body模型

class Body < ApplicationRecord
  belongs_to :user
end

这是身体控制器

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

创建操作正常。我只是努力让Show动作起作用,尽管传递了正确的参数:

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"}

当我进入控制台时,我可以运行@ body.sex或@ body.age或任何其他与我正在寻找的属性相对应的方法....

非常感谢您提前帮助我解决此问题。

编码你的,

鲁道夫

2 个答案:

答案 0 :(得分:0)

HI在控制器中显示操作,将@user.bodies(params[:id])替换为Body.find(params[:id])

答案 1 :(得分:0)

您应该对将从与用户模型的关联返回的记录运行查询查询。

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