Как проверить ввод пользователя в RoR? - PullRequest
2 голосов
/ 21 января 2010

Я действительно не знаю совета с проверкой ввода пользователя. Я начинаю с RoR. Я читаю много страниц об этой проблеме, но никогда не получаю, чего хочу. До RoR я программировал на Java. Моя проблема: Как я могу проверить пустое поле и показать сообщения об ошибках? Вот фрагменты кода:

polls_controller.rb

class PollsController < ApplicationController

 def create

  @poll = Polls.new
  @poll.question = params[:question]
  @poll.author_ip = request.remote_ip

 end

 def show
 end

 def new
 end

 def edit
 end

end

polls.rb

class Polls < ActiveRecord::Base
  has_many :options
  validates_presence_of :question, :message => 'Something is wrong...'
end

create.html.erb

<p>
 <% form_tag polls_path do %>

  <%= label_tag :question, "Enter your question:" %><br>
  <%=text_field_tag :question, params[:question] %>
  <%=submit_tag "Send"  %>

 <% end %>
</p>

Ответы [ 3 ]

8 голосов
/ 21 января 2010

Во-первых, не добавляйте бессмысленные сообщения в проверки, сообщения об ошибках по умолчанию хороши.

Во-вторых, измените ваш код на контроллер примерно так:

def new
  @pool = Pool.new
end
def create
  @pool = Pool.new(params[:pool])
  if @pool.save
    flash[:notice] = "Some text indicating it was created"
    redirect_to pool_path(@pool)
  else
    flash[:error] = "Something is wrong while validating"
    render :new
  end
end

и просмотр используйте помощник по формам :

<% form_for @pool do |f| %>
  <%= f.error_messages %>
  <%= f.label :question, "Enter your question:" %><br>
  <%= f.text_field :question %><br>
  <%= submit_tag "Send" $>
<% end %>

Таким образом, вы получаете проверку в режиме, а в контроллере вам нужно только проверить, можно ли сохранить модель. Это не так, то в вашей форме просмотра может отображаться error_messages для этой модели .

Для отображения флеш-сообщений в месте размещения:

<% if flash[:notice] -%>
  <p class="notice"><%= flash[:notice] %></p>
<% end -%>
<% if flash[:error] -%>
  <p class="error"><%= flash[:error] %></p>
<% end -%>
1 голос
/ 21 января 2010

Я бы проверил этот пост, с одной стороны. ActiveForm может немного помочь здесь. Тем не менее, если вы хотите выполнить это самостоятельно, вы можете легко добавить некоторую проверку в контроллер, как это сделал постер в своей обновленной версии кода.

def results
if params[:name] && !params[:name].blank?
 @name = params[:name]
else
 raise MyApp::MissingFieldError
end

if params[:age] && !params[:age].blank? && params[:age].numeric?
  @age = params[:age].to_i
else
  raise MyApp::MissingFieldError
end
rescue MyApp::MissingFieldError => err
 flash[:error] = "Invalid form submission: #{err.clean_message}"
 redirect_to :action => 'index'
end

Тогда вам просто нужно отобразить flash [: errors] в вашем .erb, если он существует.

Я бы тоже посмотрел что-то вроде этого .

0 голосов
/ 21 января 2010

Включить

<% if flash[:notice] %>
    <%= flash[:notice] %>
<% end %>

где-то на вашей веб-странице, но желательно в app/views/layouts/application.html.erb.

Обратитесь к учебным пособиям RoR для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...