Рендеринг частичного со статической страницы
Я пытаюсь визуализировать частичное на моей главной странице приветствия (я использовал HighVoltage Gem для его создания), форму группы, где пользователь может создать новую группу...
то, что я пробовал до сих пор, дает мне следующую ошибку...
Первый аргумент в форме не может содержать ноль или быть пустым
= 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
Поэтому, когда я пытаюсь загрузить главную страницу, она сразу переходит на страницу приветствия и вылетает из-за ошибки, указанной выше.
я думаю, что знаю, в чем проблема... но я не знаю, как ее решить. Я пытаюсь визуализировать форму, но, поскольку "группа" жизнеспособна, никогда не инициализируется, она выдает эту ошибку.
Мой код...
просмотров / страниц /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
1 ответ
Я настроил демонстрационное приложение высокого напряжения с формой для создания "запроса".
Вот коммит с изменениями, чтобы заставить форму работать.
Вот шаги высокого уровня:
Создайте форму, которая будет использоваться в представлении:
<%= 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
.save
метод на Inquiry
объект будет использовать для отправки запроса по электронной почте или сохранения в базе данных и т. д. Обратите внимание на вызов valid?
это обеспечивается ActiveModel::Model
и вернет 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('<h2>Thank you for contacting us!</h2>');
<% else %>
$('#inquiry_form').html('<%= j render 'inquiry_form', resource: @inquiry %>');
<% end %>
Это возвращает сообщение "success", если запрос действителен, и возвращает форму с ошибками, если запрос недействителен.