[英]Moving rails from to from _form.html.erb to application.html.erb
我已经为网站完成了大部分功能。 现在,我试图使它看起来不错。 我有一个_form.html.erb,效果很好。
<%= form_for(@card) do |f| %>
<% if @card.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@card.errors.count, "error") %> prohibited this card from being saved:</h2>
<ul>
<% @card.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :event %><br />
<%= f.text_field :event %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
档
view
- cards
-- new.html.erb
-- index.html.erb
-- show.html.erb
- layouts
-- application.html.erb
- pages
-- index.html.erb
我从new.html.erb调用了该表单,并且可以将其发送到show.html.erb,就像我想要的那样。 我正在使用引导程序,因此决定使用导航栏。 我已将导航条形码放入application.html.erb中。 它工作正常,很好。 我想要通常是搜索功能的添加新卡。
当我添加表单调用时,它不起作用,当我直接将其添加到应用程序页面中时,它不起作用。 我不确定,我已经花了几个小时。 我知道它只能在show.html.erb页面上工作,两个索引页面都会出错。 老实说,我不记得我是怎么做到的。
我正在尝试边做边学,但遇到困难,需要一些帮助。
谢谢你,伊恩
我猜想,当您说它在new.html.erb中起作用时,您在cards_controller
了一个new
操作,在此操作中执行了以下操作: @card = Card.new
好吧,如果您希望将此表单放在另一个视图中(例如在application.html.erb中),则需要首先设置@card变量,以便可以执行以下操作:
# application_controller:
before_filter :new_card
def new_card
@card = Card.new
end
请注意,所有从应用程序控制器继承的控制器都将设置此@card变量
@instance_variable
潜在的问题是,您正在调用部分文件 -通过设计,这些文件旨在使您能够调用文件在应用程序中任何位置所包含的功能
您遇到的问题是您直接在部分中引用@instance_variable
。
通常这不是问题-如果您使用的像是原来那样的局部视图(用于模块化视图),那应该没问题。 当您像现在这样尝试以更通用的方式使用部分时,就会出现问题:
#app/views/controller/_form.html.erb
<%= form_for(@card) do |f| %>
这依赖于@card
实例变量是否可用,如果您要在而不是cards_controller
之外的任何其他控制器中加载局部变量,则不会使用该cards_controller
。
-
固定
解决此问题的方法是在应用程序控制器中填充@card
实例变量(如edymerchk
),或通过partial
调用的locals
哈希传递原始值:
这将允许您在局部中使用card
局部变量 :
#app/views/controller/_form.html.erb
<%= form_for card do |f| %>
-
另外,您还可以按照另一个答案中的建议设置@card
实例变量:
#app/controllers/application_controller.rb
Class ApplicationController < ActionController::Base
before_action :set_card
private
def set_card
@card = Card.new
end
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.