为什么我收到以下错误?
nil
is not an ActiveModel-compatible object. It must implement :to_partial_path.
我认为错误可能与我正在使用的教程有关,当我使用Rails 4时使用Rails 3.2.
这是型号代码:
class DashboardsController < ApplicationController def show @text_shout = TextShout.new @photo_shout = PhotoShout.new @shouts = current_user.shouts end end class PhotoShoutsController < ApplicationController def create content = build_content shout = current_user.shouts.build(content: content) if shout.save redirect_to dashboard_path else flash.alert = "Could not shout." redirect_to dashboard_path end end private def build_content PhotoShout.new(photo_shout_parameters) end def photo_shout_parameters params.require(:photo_shout).permit(:image) end end
这是在_shout.html partial上发生错误的视图代码
# app/view/dashboards/show.html.erb <%= form_for @text_shout do |form| %> <%= form.text_field :body,placeholder: 'Shout content here' %> <%= form.submit 'Shout' %> <% end %> <%= form_for @photo_shout do |form| %> <%= form.file_field :image %> <%= form.submit 'Shout' %> <% end %> <%= render @shouts %> # app/view/shouts/_shout.html.erb <%= div_for shout do %> <%= link_to shout.user.username,shout.user %> shouted +---------------------------------+ <%= render shout.content %> <--| ERROR "nil' is not an Active " | | "Model-compatible object" | +---------------------------------+ <%= link_to time_ago_in_words(shout.created_at),shout %> <% end %> # app/views/photo_shouts/_photo_shout.html.erb <%= image_tag photo_shout.image.url(:shout) %>
解决方法
您遇到的问题是因为您的数据库中存在没有与之关联的内容的现有记录.发生这种情况是因为您从非多态设置变为多态设置.您需要做的是查找缺少content_type和content_id的呼叫,并将其从数据库中删除.删除后,添加可能很有用
validates_associated:内容
到您的Shout模型,以确保将来的数据不会“破坏”您的数据库.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。