从 application.html.erb 的局部视图渲染 simple_form

Render simple_form from partial view on application.html.erb

我想为我的注册表创建一个局部视图并将其添加到应用程序布局文件中,因为它将显示在导航栏的下拉菜单中。

如何使用 simple_form gem 在局部视图中创建此表单并将其呈现在 application.html.erb 上?

<%= simple_form_for(@user, url: account_register_path) do |f| %>

考虑到上面的代码是创建表单的方式,我不知道我应该在哪里定义 @user 以在应用程序布局中使用,也不知道我是否真的需要它。

有人可以澄清一下吗?

你必须在相应的控制器动作中定义@user(我会从你的代码中假设,那个控制器被称为账户,动作是注册),它会是这样的:

@user = User.new

为了初始化实例created/updated。然后,所有字段中使用的属性应匹配用户数据库 table.

不要把它放在局部,只需要 registration 视图,用 render...

调用
#app/views/layouts/application.html.erb
<%= render "accounts/new" %>

#app/views/accounts/new.html.erb
<%= simple_form_for :user, url: account_register_path do |f| %>
...

you can use a symbol to populate form_for,它不会包括模型的属性,或提供上下文的各种隐藏方法(例如id等)。


如果您想用变量填充 accounts#new view/action,您必须在 ApplicationController:

中设置它
#app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
   before_action :set_user

   private

   def set_user
      @user = User.new
   end
end

这将允许您使用:

#app/views/accounts/new.html.erb
<%= simple_form_for @user, url: account_register_path do |f| %>

--

实现这一点的最佳方法是使用 Ajax——这样,@user 对象仅在您需要时创建(解决膨胀问题)。

我们 done this before:

您只需要以下内容:

#app/views/layouts/application.html.erb
<%= link_to "New User", account_register_path, remote: true %>

#app/controllers/accounts_controller.rb
class AccountsController < ApplicationController
   respond_to :js, :html

   def new
      @user = User.new
      respond_with @user
   end 
end

#app/views/accounts/new.js.erb
$("<%=j render 'accounts/new' %>").appendTo("body");