Ruby on rails 如何在RubyonRails4中嵌套多个模型

Ruby on rails 如何在RubyonRails4中嵌套多个模型,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在尝试以兴趣点形式嵌套模型,在我尝试添加其他模型以存储艺术家信息之前,目前已有一个嵌套模型工作正常。我试着把它们都套起来,但不明白为什么它不起作用。这是我的表格代码: <%= form_for @interest_point, :url => interest_points_path, :html => {:multipart => true} do |f| %> <div id="errors"></div><% if @int

我正在尝试以兴趣点形式嵌套模型,在我尝试添加其他模型以存储艺术家信息之前,目前已有一个嵌套模型工作正常。我试着把它们都套起来,但不明白为什么它不起作用。这是我的表格代码:

<%= form_for @interest_point, :url => interest_points_path, :html => {:multipart => true} do |f| %>

<div id="errors"></div><% if @interest_point.errors.any? %>
  <h3><%= pluralize(@interest_point.errors.count, 'error')%> prevented this form from being saved.</h3>
  <ul>
    <% @interest_point.errors.full_messages.each do |msg| %>
      <li><%= msg %></li>
    <% end %>
  </ul>
  <% end %>
</div>

<p>Name:  <%= f.text_field(:name) %></p>
<p>Type:  <%= f.select(:interest_type, options_for_select([['City', 'City']]))%></p>
<!-- TODO: add if/then logic to only show artist first_name & last_name fields -->
<% f.fields_for(:artists) do |artist_form| %>
  <p>Artist First Name: <%= artist_form.text_field :first_name %></p>
  <p>Artist Last Name: <%= artist_form.text_field :last_name %></p>
<% end %>
<!-- END ARTIST INFO -->
<p>Latitude: <%= f.text_field(:latitude) %></p>
<p>Longitude: <%= f.text_field(:longitude) %></p>

<!-- Start Upload Photo section -->
<%= f.fields_for(:images) do |builder| %>
  <% if builder.object.new_record? %>
    <p><%= builder.file_field(:photo) %></p>
  <% else %>
    <% @interest_point.images.each do |image| %>
      <%= image_tag(image.photo.url) if image.photo? %>
    <% end %>
  <% end %>
<% end %>
<!-- END Upload Photo section -->

<p>Summary:<br /><%= f.text_area(:summary,  size: "50x10") %></p>
<p><%= f.submit("Save Interest Point") %></p>
<% end %>
这里是models/artist.rb

class Artist < ActiveRecord::Base
  belongs_to :interest_point

  validates :first_name, :last_name, presence: true
end
模型/兴趣点.rb

# An +Interest Point+ is a specific instance of any location that may have special     meaning to one or more users. Once an +Interest Point+ is added to the application by a     user, others are able to locate that instance on a map, view specific details, and leave     individual Comments.  User are also able to share an +Interest Point+ with a friend using     our share feature (future). 
# @author   Ashley Childress
# @version 1.23.2014
class InterestPoint < ActiveRecord::Base    
  belongs_to :creator, :class_name => 'User', :foreign_key => 'contributor_id'
  belongs_to :approver, :class_name => 'User', :foreign_key => 'approver_id'

  has_many :artists
  accepts_nested_attributes_for :artists

  # One or more +Comment+ object that may be associated with this +Interest Point+.
  # @return [Array<Comment>]
  has_many :comments, as: :commentable, dependent: :destroy

  # A set of images that have been uploaded by the user that show this +Interest     Point+.
  # @see #Image
  # @note Only .jpg, .jpeg, .gif, or .png files are acceptable.
  has_many :images, :dependent => :destroy
  accepts_nested_attributes_for :images, :reject_if => lambda{ |t| t['photo'].nil? },     :allow_destroy => true

  validates :name, :latitude, :longitude, presence: true

  before_save :normalize_coordinates

  protected
  # Ensure the given +latitude+ and +longitude+ coordinates are rounded to four     decimal places.
  # @pre The +latitude+ and +longitude+ must be defined as valid decimal values before     this method is called
  # @post The +latitude+ and +longitude+ values are replaced with their equivalent     values rounded to four decimal places
  def normalize_coordinates
    self.latitude = latitude.round(4)
    self.longitude = longitude.round(4)
  end   
end
和控制器/interest_points_controller.rb:

# This +InterestPointsController+ should be used to control new +InterestPoint+     instances that are added to this application.
# @author   Ashley Childress
# @version 1.25.2014
class InterestPointsController < ApplicationController

  # Create a new, empty +Interest Point+ and build any associated +Images+.
  def new
    @interest_point = InterestPoint.new
    @interest_point.artists.build
    @interest_point.images.build
  end

  # Create a new +Interest Point+ with attributes equal to the given parameters.
  # @param [String] name the title used to identify the +Interest Point+
  # @param [Float] latitude the location given as a northern coordinate degree
  # @param [Float] longitude the location given as a western coordinate degree
  # @param [String] interest_type the category the +Interest Point+ should be defined under
  # @param [String] summary a description of this +Interest Point+ that will be displayed to users on the details page
  # @param [Image] photo the .jpg, .jpeg, .gif, or .png file that will be displayed for this +Interest Point+
  def create
    @interest_point = InterestPoint.new(interest_point_params)
    if @interest_point.save
      flash[:notice] = "#{@interest_point.name} was created successfully!"
      redirect_to interest_point_path(@interest_point)
    else
      render 'new'
    end
  end

我收到错误ActiveRecord::UnknownAttributeError at/interest\u points/new unknown属性:interest\u point\u idDo艺术家和图像在数据库中都有interest\u point\u id列?图像有,但艺术家没有,然后您需要添加它:这是你工作所必需的。