这是第一次使用多态关联。我有一个属于用户模型和记分板模型的图片模型。图片模型的迁移如下所示。
class CreatePictures < ActiveRecord::Migration
def change
create_table :pictures do |t|
t.string :picture
t.references :imageable, index: true, polymorphic: true
t.timestamps null: false
end
add_foreign_key :pictures, :imageables
end
add_index :pictures, :imageable_id
# add index on the pictues table on the imageable_id column
end
belongs_to和has_one关联代码如下所示。
class Scoreboard < ActiveRecord::Base
has_one :picture, as: :imageable
end
class User < ActiveRecord::Base
has_one :picture, as: :imageable
end
class Picture < ActiveRecord::Base
belongs_to :imageable, polymorphic: true
end
scoreboard_picture
资源嵌套在scoreboards
资源中。
resources :scoreboards do
resources :scoreboard_picture, only: [:create, :destroy, :new]
end
我有scoreboard_picture
控制器,使用以下新方法。
class ScoreboardPictureController < ApplicationController
def new
@scoreboard = Scoreboard.find(params[:scoreboard_id])
@picture = @scoreboard.build_picture
end
New
行动
<%= form_for([@scoreboard, @picture], url: scoreboards_picture_path, html: {multipart: true}) do |f| %>
<%= f.file_field :picture, accept: 'image/jpeg,image/gif,image/png', id: "files" %>
<% end %>
之前我已经实现了嵌套路由,它没有给我任何问题。但是,我不断收到以下错误。
undefined local variable or method `scoreboards_picture_path' for #<#<Class:0x007fa4c054f490>:0x00000007574700>
我认为它与多态关联有关。我尝试在表单中提供URL。它仍然无法正常工作。我在这个问题上阅读了一些其他帖子并尝试使用对他们有用的东西,仍然得到错误。我很确定我的新方法是正确的。我已经坚持了一段时间。任何帮助将不胜感激。