将与控制器关联的表单放入另一个控制器

Putting form associated with a controller in another controller

我想做的事情很简单,但由于某些原因我遇到了很多麻烦。我只想让人们在我的网络应用程序的主页上注册时事通讯。我有一个 NewsletterSubscriptionsController,它有一个创建操作,我想用它来存储人们的电子邮件。我还有一个带主页操作的 StaticPagesController。在家庭视图中,我想放置一个允许注册的表格。现在我有这样的东西:

<%= form_for(@newsletter_subscription, url: newsletter_subscriptions_path) 做|f| %> 但我一直收到第一个参数不能为零的错误。

在我的 NewsletterSubscriptionsController 中,我有两种用于新建和创建的方法。

def new
  @newsletter_subscription = NewsletterSubscription.new
end

def create
  @newsletter_subscription = NewsletterSubscription.new(newsletter_subscription_params)
  if @newsletter_subscription.save
    redirect to root_url
    flash[:success] = "signed up"
  else
    redirect to root_url
end

我怎样才能让人们可以在 'staticpages#home'

的主页上填写表格

如果您在 create 中调用 .new 时遇到 ArgumentError,则您的参数未成功传递。检查您的表单以确保它以 params[:newsletter_subscription][:email] 的形式发送电子邮件,并确保您的请求发送到路由器中指定的正确位置(确保您已创建到 create 的路由newsletter_subscriptions.

行动

此外:如果您要从通过其他控制器访问的主页创建新的 NewsletterSubscriptions,则不需要 NewsletterSubscriptionsControllernew 操作,因为您的用户已经可以访问主页上的表格。在您描述的上下文中,您的 new 操作未被使用。