Ruby on rails Nil:Nil类错误,当表单首先加载到页面上以生成对象时,每个循环都会出现错误
我在一个页面上有一个表单,它正在为“指南”创建一个“提示”。在表单下方,我正在所有@guide.tips上运行一个each循环。当each循环加载forms空白对象时,我不断收到一个错误,因为它将其视为提示。我目前已经通过使用jQuery在页面加载后注入表单解决了这个问题,但必须有更好的解决方案 Guide.html.erb上的每个循环Ruby on rails Nil:Nil类错误,当表单首先加载到页面上以生成对象时,每个循环都会出现错误,ruby-on-rails,rails-activerecord,Ruby On Rails,Rails Activerecord,我在一个页面上有一个表单,它正在为“指南”创建一个“提示”。在表单下方,我正在所有@guide.tips上运行一个each循环。当each循环加载forms空白对象时,我不断收到一个错误,因为它将其视为提示。我目前已经通过使用jQuery在页面加载后注入表单解决了这个问题,但必须有更好的解决方案 Guide.html.erb上的每个循环 <% if !@guide.tips.blank? %> <% @guide.tips.each do |tip| %&g
<% if !@guide.tips.blank? %>
<% @guide.tips.each do |tip| %>
<div class="row mx-1">
<div class="col-md-3 border-right">
<div class="float-left">
<%= image_tag avatar_url(tip.user), class: "float-left text-left align-middle rounded img-fluid mx-3", width: "30%" %>
<p><%= tip.user.fullname %></p>
</div>
<div class="float-right mr-3">
<%= link_to like_tip_path(tip), method: :put do %>
<div class="fas fa-angle-up"></div>
<%= tip.get_upvotes.size %>
<% end %><br/>
<%= link_to dislike_tip_path(tip), method: :put do %>
<div class="fas fa-angle-down"></div>
<%= tip.get_downvotes.size %>
<% end %>
</div>
</div>
<div class="col-md-8 ml-3">
<h6><%= tip.title %> -<span class="ml-1"><small><%= tip.created_at.strftime("%A, %d %b %Y %l:%M %p")%></small></span></h6>
<%= tip.tip %>
</div>
</div><hr/>
<% end %>
<% end %>
def new
@guide = Guide.find(params[:guide_id])
@tip = Tip.new
end
def edit
end
def create
@guide = Guide.find(params[:guide_id])
params[:tip][:user_id] = current_user.id
@tip = @guide.tips.create!(tip_params)
redirect_to guide_path(@guide)
end
<% @guide.tips.each do |tip| %>
<div class="row mx-1">
<div class="col-md-3 border-right">
<div class="float-left">
<%= image_tag avatar_url(tip.user), class: "float-left text-left align-middle rounded img-fluid mx-3", width: "30%" %>
<p><%= tip.user.fullname %></p>
</div>
<div class="float-right mr-3">
<%= link_to like_tip_path(tip), method: :put do %>
<div class="fas fa-angle-up"></div>
<%= tip.get_upvotes.size %>
<% end %><br/>
<%= link_to dislike_tip_path(tip), method: :put do %>
<div class="fas fa-angle-down"></div>
<%= tip.get_downvotes.size %>
<% end %>
</div>
</div>
<div class="col-md-8 ml-3">
<h6><%= tip.title %> -<span class="ml-1"><small><%= tip.created_at.strftime("%A, %d %b %Y %l:%M %p")%></small></span></h6>
<%= tip.tip %>
</div>
</div><hr/>
<% end unless @guide.tips.blank? %>
小费形式部分
<%= form_for([@guide, @guide.tips.build]) do |f| %>
<div class="form-group row">
<div class="col-sm-12">
<p class="text-left">Tip Title</p>
<%= f.text_field :title, placeholder: "Enter Title", class: "form-control" %>
</div>
<div class="col-sm-12 mt-2">
<p class="text-left">Your Tip</p>
<%= f.text_area :tip, placeholder:"What's your tip for this travel guide?", class: 'form-control' %>
</div>
</div>
<div class="form-group row">
<div class="col-md">
<%= f.submit 'Submit', class: 'btn btn-primary btn-block' %>
</div>
</div>
<% end %>
提示标题
您的提示
使用已有的结构,您可以执行以下操作:
1%>
(假设始终显示空的“构建”提示)
或者您可以使用:
在循环内部,在实际窗体之前
您也不需要将空白?
检查为。空枚举器上的每个
都不会执行块,并且只要指南和提示之间有很多关系,它就会始终生成一个集合代理
我会这样写:
...
这里有另一个解决方案,它不分离控制器和视图之间的逻辑
,并清理循环的空数组语句
Guide.html.erb上的每个循环
<% if !@guide.tips.blank? %>
<% @guide.tips.each do |tip| %>
<div class="row mx-1">
<div class="col-md-3 border-right">
<div class="float-left">
<%= image_tag avatar_url(tip.user), class: "float-left text-left align-middle rounded img-fluid mx-3", width: "30%" %>
<p><%= tip.user.fullname %></p>
</div>
<div class="float-right mr-3">
<%= link_to like_tip_path(tip), method: :put do %>
<div class="fas fa-angle-up"></div>
<%= tip.get_upvotes.size %>
<% end %><br/>
<%= link_to dislike_tip_path(tip), method: :put do %>
<div class="fas fa-angle-down"></div>
<%= tip.get_downvotes.size %>
<% end %>
</div>
</div>
<div class="col-md-8 ml-3">
<h6><%= tip.title %> -<span class="ml-1"><small><%= tip.created_at.strftime("%A, %d %b %Y %l:%M %p")%></small></span></h6>
<%= tip.tip %>
</div>
</div><hr/>
<% end %>
<% end %>
def new
@guide = Guide.find(params[:guide_id])
@tip = Tip.new
end
def edit
end
def create
@guide = Guide.find(params[:guide_id])
params[:tip][:user_id] = current_user.id
@tip = @guide.tips.create!(tip_params)
redirect_to guide_path(@guide)
end
<% @guide.tips.each do |tip| %>
<div class="row mx-1">
<div class="col-md-3 border-right">
<div class="float-left">
<%= image_tag avatar_url(tip.user), class: "float-left text-left align-middle rounded img-fluid mx-3", width: "30%" %>
<p><%= tip.user.fullname %></p>
</div>
<div class="float-right mr-3">
<%= link_to like_tip_path(tip), method: :put do %>
<div class="fas fa-angle-up"></div>
<%= tip.get_upvotes.size %>
<% end %><br/>
<%= link_to dislike_tip_path(tip), method: :put do %>
<div class="fas fa-angle-down"></div>
<%= tip.get_downvotes.size %>
<% end %>
</div>
</div>
<div class="col-md-8 ml-3">
<h6><%= tip.title %> -<span class="ml-1"><small><%= tip.created_at.strftime("%A, %d %b %Y %l:%M %p")%></small></span></h6>
<%= tip.tip %>
</div>
</div><hr/>
<% end unless @guide.tips.blank? %>
-
小费形式部分
<%= form_for([@guide, @guide.tips.build]) do |f| %>
<div class="form-group row">
<div class="col-sm-12">
<p class="text-left">Tip Title</p>
<%= f.text_field :title, placeholder: "Enter Title", class: "form-control" %>
</div>
<div class="col-sm-12 mt-2">
<p class="text-left">Your Tip</p>
<%= f.text_area :tip, placeholder:"What's your tip for this travel guide?", class: 'form-control' %>
</div>
</div>
<div class="form-group row">
<div class="col-md">
<%= f.submit 'Submit', class: 'btn btn-primary btn-block' %>
</div>
</div>
<% end %>
通过从关联外部创建提示(即不使用构建),它将不会加载到类变量的子级中
<%= form_for([@guide, Tip.new(guide: @guide)]) do |f| %>
<div class="form-group row">
<div class="col-sm-12">
<p class="text-left">Tip Title</p>
<%= f.text_field :title, placeholder: "Enter Title", class: "form-control" %>
</div>
<div class="col-sm-12 mt-2">
<p class="text-left">Your Tip</p>
<%= f.text_area :tip, placeholder:"What's your tip for this travel guide?", class: 'form-control' %>
</div>
</div>
<div class="form-group row">
<div class="col-md">
<%= f.submit 'Submit', class: 'btn btn-primary btn-block' %>
</div>
</div>
<% end %>
提示标题
您的提示
这对我来说非常有效,似乎是实现我想要的目标的一个好方法!