因此,我一直在尝试为用户添加评论部分,以便在婚礼场地添加评论。我一直在网上关注如何执行此操作的教程,但是,我一直陷入同样的困境。
错误:
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
浏览/评论/ _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
P.S。对不起它是第一次使用这个论坛,所以可能看起来不是最好的:(
如果需要更多代码来解决问题,请告诉我:D
提前致谢:)
答案 0 :(得分:1)
您的迁移说t.references :venues
。 t.references(model)
将在此处创建名为“#{model} _id”的表t
上的外键。这意味着您的外键是“venues_id”,但您想要的是“venue_id”。只需将t.references :venues
单一化为t.references :venue
。
这解释了为什么错误为评论说“未知属性'venue_id'。”由于您有“venues_id”而不是“venue_id”,因此venue_id属性不存在。
确保在重新运行rake db:rollback
之前回滚迁移(rake db:migrate
)。
答案 1 :(得分:0)
请在评论模型中更正您与belongs_to :venue
的关联,并根据迁移到t.references :venue
更改迁移
由评论模型中的迁移生成的字段将是&#39; venue_id&#39;你准备好了!!
答案 2 :(得分:0)
您的迁移说t.references :venues
。 t.references(model)
将在表t上创建一个名称为#{model}_id
的外键。这意味着您的外键是venues_id
,但是您想要的是venue_id
。只需将t.references :venues
单个化为t.references :venue
。
这说明了为什么错误显示为unknown attribute 'venue_id' for Comment.
的原因,因为您拥有venues_id
而不是venue_id
,所以venue_id
属性不存在。
确保在重新运行rake db:rollback
之前回滚迁移(rake db:migrate
)。
OR
您可以简单地将t.references
的迁移表从venues
更改为venue
,然后在终端机rake db:migrate:redo
中运行此命令。
这会将您的架构表更改为您在迁移文件中所做的最新更改。