У меня есть форма, в которой пользователь ('member') отправляет 4-значный вывод, который затем сохраняется в переменной сеанса с именем :submitted_pin
. По какой-то причине быстрое выполнение if/else не работает должным образом, и я предполагаю, что это глупая ошибка с моей стороны, но если вы захотите взглянуть, я бы очень признателен!Ruby on Rails - проверка соответствия данных формы данных базы данных
Посмотреть
<%= 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 независимо от того, что, даже если Pin введен делает соответствует булавку в базе данных для этого пользователя , Помогите! Спасибо :)
В вашем методе 'validate_pin', прямо над вашим оператором if, добавьте эту строку:' raise '# {@ member_pin} == # {session [: submitted_pin]}: # {@ member_pin == session [: submitted_pin] } ", и это даст вам три части данных: переменную сеанса submit_pin, как понимается Rails, member.pin, как понято Rails, и их эквивалентность. Если бы мне пришлось рисковать догадаться от старта, я бы поспорил, что это строка, а другая - целое число - это все время затмевает меня. –
Большое вам спасибо за ваш ответ. Похоже, вы правы ... одна должна быть строкой, а одна должна быть целым числом. Это то, что я получаю от метода 'raise', который вы написали мне! '5555 == 5555: false' - Как мне перейти на преобразование' to_i' или 'to_s' в мой код, который я представил в моем вопросе? – briankulp
Отлично! Здесь есть несколько способов: проще всего установить '.to_i' на каждом из элементов, которые вы сравниваете, таким образом вам не нужно заботиться о том, что именно. Другим методом было бы использовать '.inspect' или' .class' в каждой из ваших точек данных, чтобы выяснить, какая часть является чем-то, а затем использовать конвертер, такой как '.to_i', чтобы преобразовать только тот, который вам нужен. Один из них должен сделать трюк! –