Ruby on Rails - проверка соответствия отправленных данных формы данным базы данных - PullRequest
2 голосов
/ 15 февраля 2012

У меня есть форма, в которой пользователь ('member') отправляет 4-значный пин-код, который затем сохраняется в переменной сеанса, называемой :submitted_pin. По какой-то причине быстрое выражение if / else не работает должным образом, и я предполагаю, что это глупая ошибка с моей стороны, но если бы вы захотели взглянуть, я был бы очень признателен!

View

<%= form_for :member_pin, :url => { :action => "verify_pin", :id => member.id } do |f| %>`
  <%= f.label :pin %>
  <%= f.text_field :pin %>
<%= f.submit 'Submit' %>

Контроллер

Перед фильтром

before_filter :validate_pin, :only => :show

Действие (POST Route)

def verify_pin
  @member = Member.find(params[:id])

  session[:submitted_pin] = params[:member_pin][:pin]
  redirect_to @member
end

Фильтр

def validate_pin
  @member = Member.find(params[:id])
  @member_pin = @member.pin

  if session[:submitted_pin] == @member_pin
    render @member
  else
    redirect_to '/'
  end
end

И результатом всего этого является перенаправление на мой root_url, независимо от того, что, даже если введенный ПИН-код соответствует , соответствует ли этот пин-код в базе данных для этого пользователя. Помогите! Спасибо:)

1 Ответ

2 голосов
/ 15 февраля 2012

На основании результатов рейза, о котором мы говорили в комментариях, звучит так, как будто класс не соответствует. Самый простой способ исправить (и, ИМХО, самый простой для чтения) будет настроить ваш код валидатора следующим образом:

if session[:submitted_pin].to_i == @member_pin.to_i
  render @member
else
  redirect_to '/'
end

Если есть вероятность, что session[:submitted_pin] будет nil, вы можете использовать session[:submitted_pin].try(:to_i); он вернет nil, если переменная не установлена, и предотвратит возникновение ошибки.

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