【问题标题】:Instance variable not showing in view forms实例变量未显示在视图表单中
【发布时间】:2016-01-15 22:33:32
【问题描述】:

我在让实例变量显示在我的视图中时遇到问题。我正在使用私有方法设置它,并且我正在使用 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) %>

我不确定我还需要做什么才能在视图中使用实例变量。我还想知道之后是否仍然可以访问更新语句中的实例变量?任何帮助将不胜感激!

【问题讨论】:

    标签: ruby-on-rails forms ruby-on-rails-4 ruby-2.0


    【解决方案1】:

    在 before_filter 中设置 set_form 没有任何价值,因为您在方法中调用它。

    您需要显式渲染您的视图文件...我看不到您正在这样做。如果表单被调用(例如)edit_value.html.erb 那么你的两个edit_... 方法需要有

    render :edit_value
    

    实例值在更新语句中不可用。当您更新时,除了在您的表单或 url 中提交的信息,或者您保存在 session 哈希中的任何内容,或者您​​保存在数据库中的任何内容之外,没有任何可用的信息。

    【讨论】:

    • 谢谢!在视图中做那种事情可以吗?还是在 Rails MVC 框架中不允许这样做?
    • 是允许的,但通常你希望尽可能减少视图中的逻辑。如果我正在写这篇文章,我会让edit_passwordedit_email 呈现不同的视图。如果两者之间有任何共同点(例如您的link_to :back),我会将其放在两种形式都调用的部分中。..
    猜你喜欢
    • 2013-08-23
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多