繁体   English   中英

未知属性Ruby on Rails 4

[英]unknown attribute ruby on rails 4

因此,我一直在尝试为用户添加评论部分,以便在婚礼场地上添加他们的评论。 我一直在网上关注有关如何执行此操作的教程,但是,我一直坚持这一观点。

错误:

Showing C:/Sites/Innovative_WeddingsLatest/app/views/comments/_form.html.erb where line #1 raised:

unknown attribute 'venue_id' for Comment.
Trace of template inclusion: app/views/venues/show.html.erb

Rails.root: C:/Sites/Innovative_WeddingsLatest

Application Trace | Framework Trace | Full Trace
app/views/comments/_form.html.erb:1:in `_app_views_comments__form_html_erb___721803434_50744988'
app/views/venues/show.html.erb:32:in `_app_views_venues_show_html_erb___40167619_56734404'

这是我的代码:

class CommentsController < ApplicationController
def create
    @venue = Venue.find(params[:venues_id])
    @comment = @venue.comments.create(params[:comment].permit(:name, :body))

    redirect_to venue_path(@venue)
end

评论模型:

class Comment < ActiveRecord::Base
belongs_to :venues
end

场地型号:

class Venue < ActiveRecord::Base
#check if user has left venue field blank, if so show error "cannot be blank"
validates :venue, :presence => {:message => "cannot be blank ..."}
#validates :name, presence: true, uniqueness: true

has_many :bookings
has_many :comments
end

Views / comments / _form.html.erb

<%= form_for([@venue, @venue.comments.build]) do |f| %>

<p>
    <%= f.label :name %>
</p>

<p>
    <%= f.label :body %><br>
    <%= f.text_area :body %>
</p>
<br>

<p>s
    <%= f.submit %>
</p>

<% end %>

观看次数/地点/show.html.erb

<p id="notice"><%= notice %></p>
<!-- when user clicks on "show" information of the specific venue is displayed on a single page --> 
</br>
</br>
</br>
</br>

<p>
  <strong>Venue:</strong>
  <%= @venue.venue %>
</p>

<p>
  <strong>Description:</strong>
  <%= @venue.description %>
</p>

<p>
  <strong>Price:</strong>
  <%= number_to_currency @venue.price, unit: "£" %>
</p>

<p>
    <%# if not @venue.img_url.blank? %>
      <strong>Img url:</strong>
      <%#= image_tag @venue.img_url, :size => "180x250" %>
    <%# else %>
        <%#= image_tag "no-image.jpg", :size => "180x250" %>
    <%# end %>
</p>

    <%= render 'comments/form' %>

<%= link_to 'Edit', edit_venue_path(@venue) %> |
<%= link_to 'Back', venues_path %>

评论迁移:

    class CreateComments < ActiveRecord::Migration
  def change
    create_table :comments do |t|
      t.string :name
      t.text :body
      t.references :venues

      t.timestamps null: false
    end
  end
end

PS对不起,它是第一次使用这个论坛,所以看起来可能不是最好的:(

如果需要更多代码来解决问题,请告诉我:D

提前致谢 :)

您的迁移说t.references :venues t.references(model)在此处将在表t上创建一个名为“#{model} _id”的外键。 这意味着您的外键是“ venues_id”,但是您想要的是“ venue_id”。 只需将t.references :venue单一化t.references :venues

这解释了为什么错误显示为“注释的未知属性'venue_id'”。 由于您使用的是“ venues_id”而不是“ venue_id”,所以场地名称id 不存在

确保在重新运行rake db:migrate之前回滚迁移( rake db:rollback )。

请在注释模型中将您的关联更正为belongs_to :venue同时将每次迁移的迁移更改为t.references :venue ,注释模型中的迁移生成的字段将为“ venue_id”,并且您准备好了!

您的迁移说t.references :venues t.references(model)将在表t上创建一个名为#{model}_id的外键。 这意味着您的外键是venues_id ,但是您想要的是venue_id 只需将t.references :venue单一化t.references :venues

这就解释了为什么错误unknown attribute 'venue_id' for Comment. 由于您使用的是venues_id而不是venue_id ,所以venue_id属性不存在。

确保在重新运行rake db:migrate之前回滚迁移( rake db:rollback )。

要么

你可以简单地改变你的迁移表t.referencesvenuesvenue ,并在终端运行此命令rake db:migrate:redo 这会将您的架构表更改为您在迁移文件中所做的最新更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM