我想将每个新闻与某个特定用户相关联。 我已将评论链接到特定新闻,但这不起作用
_form.html.erb
<%= form_for([@user , @user.newss.build]) do |form| %>
<%# if news.errors.any? %>
<div id="error_explanation">
<h2><%#= pluralize(news.errors.count, "error") %> prohibited this
news from being saved:</h2>
<ul>
<%# news.errors.full_messages.each do |message| %>
<li><%#= message %></li>
<%# end %>
</ul>
</div>
<%# end %>
<div class="field">
<%= form.label :title %>
<%= form.text_field :title %>
</div>
<div class="field">
<%= form.label :description %>
<%= form.text_area :description %>
</div>
<div class="actions">
<%= form.submit %>
</div>
<% end %>
我的user.rb
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
has_many :news
end
#my news.rb
class News < ApplicationRecord
has_many :comments
belongs_to :user
end
它显示了不同类型的错误,我不明白...
答案 0 :(得分:0)
Ruby on rails在配置上遵循约定,这意味着您只需要遵循正确的约定即可获得正确的结果。
例如:
这里新闻属于用户,用户有很多新闻 因此要获取特定用户的新闻,您将执行 user.news ;对于新闻,您将进行 news.user
这里我们使用新闻的复数形式,而用户使用单数形式
因此,在您的代码中,您只是为表单犯了一个约定错误。
只需从以下代码中的新闻中删除多余的“ s”即可。
<%= form_for([@user , @user.newss.build]) do |form| %>
这必须是:
<%= form_for([@user , @user.news.build]) do |form| %>
答案 1 :(得分:0)
如果您有用户登录并且新闻控制器启动新闻对象并创建如下对象,我建议在控制器级别执行此操作,
class NewsController < ApplicationController
def new
@news = News.new #place this inside your form
end
def create
@news = current_user.news.create permit_params
if @news.errors.blank?
# Redirect or concerned logic here
else
# Rerender errors to the form
end
end
private
def permit_params
params.require(:news).permit(:title, :description)
end
end
这将确保仅将新闻绑定到创建新闻的用户,否则新闻将传递user_id,这是一个公开的漏洞。希望这会有所帮助:)