我为网站完成了大部分功能。现在我想让它看起来不错。我有一个非常好的_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,就像我想要的那样。我正在使用bootstrap并决定使用导航栏。我已将导航条形码放入application.html.erb。它工作得很好,很好。我希望通常的搜索功能是添加一张新卡。
当我添加表单调用时,它不起作用,当我将它直接添加到应用程序页面时,它不起作用。我不确定,我花了好几个小时。我让它只在show.html.erb页面上工作,两个索引页面都会出错。老实说,我不记得我是怎么做到的。
我正在努力学习,但我被困住了,需要一些帮助。
谢谢你, 伊恩
答案 0 :(得分:1)
我想当你说它在你的new.html.erb中工作时,你的new
内有cards_controller
个动作,并且在这个动作中你有类似的东西:@card = Card.new
好吧,如果您想将此表单放在另一个视图中,就像在application.html.erb中一样,您需要首先设置@card变量,这样您就可以执行以下操作:
# application_controller:
before_filter :new_card
def new_card
@card = Card.new
end
请注意,从应用程序控制器继承的所有控制器都将设置此@card变量
答案 1 :(得分:0)
<强> @instance_variable 强>
这里的根本问题是您正在调用partial - 按设计,这些是为了让您能够调用文件中包含的的功能应用
您遇到的问题是您在部分内容中直接引用了 @instance_variable
。
这通常不是问题 - 如果你像原来一样使用偏见(模块化视图),它应该没问题。当您尝试以更一般化的方式使用部分时会出现问题,就像您现在所做的那样:
#app/views/controller/_form.html.erb
<%= form_for(@card) do |f| %>
这依赖于@card
实例变量可用,如果您在cards_controller
以外的任何其他控制器中加载部分,则不会有。
-
<强>修正强>
解决此问题的方法是在应用程序控制器中填充@card
实例变量(如edymerchk
所述),或者通过locals
哈希传递原始值。 partial
来电:
这样您就可以在部分中使用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