Groupon警告Rails

时间:2011-03-11 11:57:54

标签: ruby-on-rails

我是新手,所以请耐心等待。我愿意接受有关如何以不同方式做到这一点的建议。

我想在rails中的一个布局中渲染2个独立的控制器动作。

我有2个控制器:优惠券和MainAlert。在我的应用程序范围布局页面的主体中,我有一个<yield >,它根据请求加载Coupons或MainAlerts的索引操作(e.i.localhost / coupons或localhost / MainAlerts)。

但是,我想加载Coupons或MainAlert或其他控制器的索引操作(取决于请求),但总是在我将隐藏和显示的顶部加载_form(用户创建新警报)。

“在groupon.com上通过电子邮件(+)获取优惠”选项

如何从布局中的MainAlerts加载控制器操作(来自优惠券的索引和_form(new?create?)。如果用户点击提交,则需要将MainAlert表单的值保存到数据库。

我愿意接受有关如何以不同方式做到这一点的建议。

谢谢大家时间。 =)

1 个答案:

答案 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")