2016-01-15 4 views
0

У меня возникают проблемы с получением переменной экземпляра, отображаемой в моих представлениях. Я устанавливаю его с помощью частного метода, и я использую before_filter, чтобы обеспечить доступ к нему в двух местах, в которых я нуждаюсь. Однако переменная экземпляра не отображается в представлении, не говоря уже о необходимости действия.Переменная экземпляра, не отображающая формы вида

В моем контроллере у меня есть

class UsersController < ApplicationController 
before_action :set_user, only: [:show, :edit, :update, :destroy] 
before_filter :set_form, :only => [ :edit_password, :edit_email ] 
... 
def edit_password 
@user = current_user 
    set_form('password') 
end 
def edit_email 
    @user = current_user 
    set_form('email') 
end 
... 
private 
def set_form(edit_type) 
    @form = edit_type 
end 

Вот файл представление

<h1>Edit Your Account</h1> 

<title><%= @form %></title> 
<% if @form == 'email' %> 
<%= render 'edit_email_form' %> 
<% else %> 
<%= render 'edit_password_form' %> 
<% end %> 
<%= link_to 'Back', user_path(@user) %> 

я не уверен, что еще мне нужно сделать, чтобы быть в состоянии использовать переменный экземпляр в представлении , Мне также интересно, можно ли еще получить доступ к переменной экземпляра в инструкции обновления? Любая помощь будет оценена!

ответ

1

Нет значения в настройке set_form в файле before_filter, поскольку вы вызываете его в своих методах.

Вам нужно явно визуализировать ваш файл вида ... Я не вижу, что вы это делаете. Если форма называется (например) edit_value.html.erb тогда ваши два edit_... методы должны иметь

render :edit_value 

значения экземпляра не доступны в заявлении обновления. Когда вы ничего не обновляете, кроме информации, представленной в вашей форме или URL-адресе, или чего-либо, что вы сохранили в хеше session, или что-либо, что вы сохраняли в своей базе данных.

+0

спасибо! В порядке ли это так? или это не должно допускаться в рамки MVC рельсов? – chris

+0

Это разрешено, но в целом вы хотите как можно больше минимизировать логику в представлении. Если бы я писал это, у меня бы «edit_password» и «edit_email» отображали отдельные виды. Если есть какие-то вещи, которые должны быть общие между двумя (например, ваш 'link_to: back'), я бы поставил это в частичном, который вызывается обеими формами. – SteveTurczyn

+0

отлично, спасибо! – chris