как заставить этот сеанс загружаться?

<p>я нашел способ форсировать инициализацию сессии. доступ к сеансу, очевидно, не вызывает инициализацию, но запись в сеанс делает. что я делаю в моем контроллере, так это сейчас:</p><pre><code>class mycontroller < applicationcontroller protect\_from\_forgery def index session["init"] = true do\_stuff end end </code></pre><p>тем не менее я не уверен, следует ли считать это нормальным поведением в rails. мне кажется неправильным писать в сеанс для инициализации. чтения должно быть достаточно.</p>

<p>я согласен с ответом @joscas, но вместо записи значения я бы удалил его, чтобы не иметь избыточных данных.</p><pre><code>class mycontroller < applicationcontroller protect\_from\_forgery def index session.delete 'init' do\_stuff end end </code></pre><p>сессия загружается таким же образом.</p><p><strong>примечание:</strong> убедитесь, что вы не используете ключ, который будет удален в вашем приложении.</p>

<p>вот некоторый соответствующий код из <a href="https://github.com/rails/rails/blob/master/actionpack/lib/action\_dispatch/request/session.rb">actiondispatch :: session</a> :</p><pre><code> def [](key) load\_for\_read! @delegate[key.to\_s] end private def load\_for\_read! load! if !loaded? && exists? end </code></pre><p>это означает, что объект сеанса будет загружен, как только вы получите доступ к любому значению по его ключу через <code>[]</code>.</p>

<p>я не очень понимаю ваш вопрос. если вам требуется, чтобы пользователь зарегистрировался или вошел в систему, прежде чем получить доступ к сайту, проблем не должно быть. при создании пользователя его информация сразу сохраняется в куки. например:</p><p>пользовательский контроллер: (регистрация осуществляется через # новых пользователей)</p><pre><code>def create @user = user.new(params[:user]) if @user.save cookies.permanent[:remember\_token] = user.remember\_token redirect\_to root\_path, notice: "thank you for registering!" else render :new end end </code></pre><p>контроллер сеансов: (вход в систему осуществляется через сеансы # new)</p><pre><code> def create user = user.find\_by\_email(params[:session][:email].downcase) if user && user.authenticate(params[:session][:password]) cookies.permanent[:remember\_token] = user.remember\_token redirect\_to root\_path, notice: "logged in." else flash.now.alert = "email or password is incorrect." render :new end end </code></pre>