我是新手,所以请耐心等待。我愿意接受有关如何以不同方式做到这一点的建议。
我想在rails中的一个布局中渲染2个独立的控制器动作。
我有2个控制器:优惠券和MainAlert。在我的应用程序范围布局页面的主体中,我有一个<yield >
,它根据请求加载Coupons或MainAlerts的索引操作(e.i.localhost / coupons或localhost / MainAlerts)。
但是,我想加载Coupons或MainAlert或其他控制器的索引操作(取决于请求),但总是在我将隐藏和显示的顶部加载_form(用户创建新警报)。
“在groupon.com上通过电子邮件(+)获取优惠”选项
如何从布局中的MainAlerts加载控制器操作(来自优惠券的索引和_form(new?create?)。如果用户点击提交,则需要将MainAlert表单的值保存到数据库。
我愿意接受有关如何以不同方式做到这一点的建议。
谢谢大家时间。 =)
答案 0 :(得分:1)
我也是一个新手,所以期待更多漂亮的答案。
但解决此问题的一种方法是在应用程序控制器中使用before_filter,以便在每个操作都得到服务时始终设置新的MainCoupon实例变量。之后,您可以使用渲染'maincoupon / form'来渲染布局中的表单。表单应该按预期工作,因为需要实例变量是由before_filter设置的。
看起来像这样:
# application_controller.rb
class ApplicationController < ActionController::Base
# other stuff
before_filter :new_coupon
# other stuff
def new_coupon
@maincoupon = MainCoupon.new
end
end
在布局中你可以拥有
<% = render 'maincoupons/form' %>
或者更好的是,使用HAML,只需:
= render 'maincoupons/form'
通常,您的新操作与用户在表单中输入信息的视图相关联。控制器中的新操作会创建所需类型的新对象@maincoupon = MainCoupon.new
,该对象用作构建表单的“支架”。
当用户提交时,表单信息被打包作为参数发送到create动作,该动作获取从表单发送的信息并使用它来创建所需类型的新对象。
@maincoupon = MainCoupon.new(params[:maincoupon])
之后,它使用@maincoupon.save
方法将其保存到数据库中。
您可以在控制台(rails控制台)中自行尝试相应的模型方法。
例如:
> A = User.new
会创建新用户,但不会将其保存到数据库。 你可以继续这样:
> A.name = "Apa"
> A.save
这将立即创建并保存。
> User.create(:name => "Apa")