从静态页面渲染部分

我正在尝试在我的主欢迎页面(我使用HighVoltage gem创建它)中呈现部分,我的Groups表单,用户可以在其中创建新组…

到目前为止我尝试过的内容给了我以下错误…

表单中的第一个参数不能包含nil或为空

= form_for @group do |f| .fieldset - if @group.errors.any? .error_messages 

我的路线配置如下

 Giraffle::Application.routes.draw do get 'sign_up', to: 'groups#new', as: 'sign_up' get 'sign_in', to: 'sessions#new', as: 'sign_in' delete 'sign_out', to: 'sessions#destroy', as: 'sign_out' resources :sessions resources :members resources :groups resources :events resources :event_sets root :to => 'high_voltage/pages#show', id: 'welcome' end 

因此,当我尝试加载主页面直接进入欢迎页面时,它会因上面的错误而崩溃

我想我知道问题是什么……但我不知道如何解决它。 我试图渲染表单,但由于“group”可执行文件永远不会初始化,因此会抛出此错误。

我的代码……

视图/页/ welcome.html.slim

 row id="div" .small-4 id="innerDiv" .row .small-4.columns align="center" img src="groupIcon.png" id="mainImg" .large-6.large-offset-2.columns h1 Sign Up = render :partial => '/groups/form' 

视图/组/ _form.html.slim

 = form_for @group do |f| .fieldset - if @group.errors.any? .error_messages h2 Form is invalid ul - @group.errors.full_messages.each do |message| li= message .row .small-12.columns = f.text_field :name, placeholder: "Name" .row .small-12.columns = f.text_field :group_id, placeholder: "Group" .row .small-12.columns = f.password_field :password, placeholder: "Password" .row .small-12.columns = f.password_field :password_confirmation, placeholder: "Confirm Password" .row .small-3.columns .actions= f.submit 'Sign Up', class: 'button radius' 

编辑

控制器/ groups_controller.rb

 class GroupsController < ApplicationController load_and_authorize_resource before_action :set_group, only: [:edit, :update, :destroy] before_action :authorize, except: [:new, :create] def new @group = Group.new end def edit end def create @group = Group.new(group_params) if @group.save redirect_to root_url, notice: 'Signed Up!' else render 'new' end end def update if @group.update(group_params) redirect_to root_url, notice: 'Group Info was successfully updated.' else render action: 'edit' end end private def set_group @group = Group.find(params[:id]) end def group_params params.require(:group).permit(:group_id, :name, :password, :password_confirmation) end end 

我设置了一个高压演示应用程序,其中包含用于创建“查询”的表单。

这是提交更改以使表单工作。

以下是高级步骤:

创建将在视图中使用的表单:

 <%= simple_form_for resource, html: { novalidate: true }, remote: true do |f| %> <%= f.input :name %> <%= f.input :email %> <%= f.input :comments, as: :text %> <%= f.button :submit, value: 'Submit' %> <% end %> 

创建一个控制器来处理请求:

 class InquiriesController < ApplicationController def create @inquiry = Inquiry.new(params[:inquiry]) @inquiry.save end end 

Inquiry对象上的.save方法可以通过电子邮件发送请求,或保存到数据库等。请注意valid?的调用valid? 这是由ActiveModel::Model提供的,如果所有validation都通过,则返回true。

 class Inquiry include ActiveModel::Model attr_accessor :comments, :email, :name validates :comments, presence: true validates :email, presence: true, email: true validates :name, presence: true def save if valid? # send an email or persist to the database... end end end 

通过使用.js.erb文件,我们可以从控制器端点向静态页面返回成功消息或错误。

 <% if @inquiry.valid? %> $('#inquiry_form').html('

Thank you for contacting us!

'); <% else %> $('#inquiry_form').html('<%= j render 'inquiry_form', resource: @inquiry %>'); <% end %>

如果请求有效,则返回“success”消息,如果请求无效,则返回带有错误的表单。