Rails无法在show视图中查看关联的模型详细信息

时间:2021-11-07 12:40:15

I have a show view with this:

我有一个展示视图:

<%= @application.application_name %>
<%= @application.application_field %>

and it produces this:

它产生了这个:

Application name: New Employment App [#<ApplicationField id: 1, application_id: 1, applicant_id: nil, field_name: "Previous Job", field_type: "String", created_at: "2012-12-03 04:26:06", updated_at: "2012-12-03 04:26:06">, #<ApplicationField id: 2, application_id: 1, applicant_id: nil, field_name: "Previous Address", field_type: "String", created_at: "2012-12-03 04:26:06", updated_at: "2012-12-03 04:26:06">] 

but if i do:

但如果我这样做:

<%= @application.application_name %>
<%= @application.application_field.field_name %>

I get the error:

我收到错误:

undefined method `field_name' for #<ActiveRecord::Relation:0x007ff4ec822268>

Why am i getting this error?

为什么我收到此错误?

Models are as follows

模型如下

class Application < ActiveRecord::Base
    belongs_to :company
    #has_many :applicants, :through => :application_field
    has_many :application_field
    accepts_nested_attributes_for :application_field, :allow_destroy => true
    attr_accessible :application_name, :application_field_attributes
end

class ApplicationField < ActiveRecord::Base
    belongs_to :application
    has_many :application_fields_value
    #belongs_to :applicant
    attr_accessible :field_name, :field_type, :field_value, :application_field_values_attributes
    accepts_nested_attributes_for :application_fields_value, :allow_destroy => true
end

controller's show action:

控制器的显示动作:

# GET /applications/1
  # GET /applications/1.json
  def show
    @application = Application.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @application }
    end
  end

3 个解决方案

#1


1  

Here Application has many ApplicationField. For example, one application has 3 application_field. if you put application.application_field it will collect all the 3 application_field record and keep in an array. So if you put @application.application_field.field_name it will throw undefined method `field_name' for An ARRAY.

这里Application有很多ApplicationField。例如,一个应用程序有3个application_field。如果您放置application.application_field,它将收集所有3个application_field记录并保留在一个数组中。因此,如果您放置@ application.application_field.field_name,它将为An ARRAY抛出未定义的方法`field_name'。

      try with <%= @application.application_field[0].field_name %>

#2


1  

@application.application_field.first.field_name

...should get you the actual object.

......应该让你得到实际的对象。

#3


1  

You could have written the model as follows:
class Application < ActiveRecord::Base
   belongs_to :company

  has_many :application_fields
  accepts_nested_attributes_for :application_fields, :allow_destroy => true
  attr_accessible :application_name, :application_fields_attributes
end`

您可以按如下方式编写模型:class Application true attr_accessible:application_name,:application_fields_attributes end`

Now the Application object will obviously have collection of application_fields.

现在Application对象显然会有application_fields的集合。

Now you can show as follows in the show page:

现在,您可以在显示页面中显示如下:

<%= @application.application_name %>
<%= @application.application_fields.map{|af| .field_name}.join(',') %>

<%= @ application.application_name%> <%= @ application.application_fields.map {| af | .field_name} .join(',')%>

#1


1  

Here Application has many ApplicationField. For example, one application has 3 application_field. if you put application.application_field it will collect all the 3 application_field record and keep in an array. So if you put @application.application_field.field_name it will throw undefined method `field_name' for An ARRAY.

这里Application有很多ApplicationField。例如,一个应用程序有3个application_field。如果您放置application.application_field,它将收集所有3个application_field记录并保留在一个数组中。因此,如果您放置@ application.application_field.field_name,它将为An ARRAY抛出未定义的方法`field_name'。

      try with <%= @application.application_field[0].field_name %>

#2


1  

@application.application_field.first.field_name

...should get you the actual object.

......应该让你得到实际的对象。

#3


1  

You could have written the model as follows:
class Application < ActiveRecord::Base
   belongs_to :company

  has_many :application_fields
  accepts_nested_attributes_for :application_fields, :allow_destroy => true
  attr_accessible :application_name, :application_fields_attributes
end`

您可以按如下方式编写模型:class Application true attr_accessible:application_name,:application_fields_attributes end`

Now the Application object will obviously have collection of application_fields.

现在Application对象显然会有application_fields的集合。

Now you can show as follows in the show page:

现在,您可以在显示页面中显示如下:

<%= @application.application_name %>
<%= @application.application_fields.map{|af| .field_name}.join(',') %>

<%= @ application.application_name%> <%= @ application.application_fields.map {| af | .field_name} .join(',')%>