【问题标题】:Putting form associated with a controller in another controller将与控制器关联的表单放入另一个控制器
【发布时间】:2015-02-18 05:01:42
【问题描述】:

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

但我不断收到第一个参数不能为 nil 错误。

在我的 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'

【问题讨论】:

  • 你的控制器中应该有newsletter_subscription_params 方法。你有吗?
  • 是的,对不起,我知道它是def newsletter_subscription_params params.require(:newsletter_subscription).permit(:email)

标签: ruby-on-rails forms routing controllers


【解决方案1】:

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

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

【讨论】:

  • 是的,我感觉新动作什么也没做,我已经删除了它。错误出现在我的 static_pages/home.html.erb 文件<%= form_for(@newsletter_subscription, url: newsletter_subscriptions_path) do |f| 中,所以我猜这个问题是因为@newsletter_subscription 没有在我的 staticpages#home 操作中定义,它总是会出现为零。关于如何解决该问题的任何想法?我读过使用 NewsletterSubscription.new 可以使它工作,但有些人也说这不是一个好主意。如果我这样做,它仍然会正确保存在我的数据库中吗?
  • 是的,如果您想在从StaticPagesController 呈现的页面上使用@newsletter_subscription,您必须在该操作中创建它。您仍然希望将订阅实际保存在其各自控制器的 create 中,这是您在这种情况下提交表单时将得到的。
  • 好的,我正在尝试。在我的def home 操作中,我加入了@newsletter_subscription = NewsletterSubscription.new,这似乎工作正常。我不知道这是否是 Rails 做事的方式
猜你喜欢
  • 1970-01-01
  • 2012-05-07
  • 2014-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-09
  • 2014-04-16
  • 2022-01-11
相关资源
最近更新 更多