【问题标题】:How can I pass an instance variable to a placeholder in form_form in Rails?如何在 Rails 中将实例变量传递给 form_form 中的占位符?
【发布时间】:2015-09-29 23:53:48
【问题描述】:

我正在尝试将实例变量传递给 form_for 中的占位符:

<h2>Sign up</h2>

<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
  <%= devise_error_messages! %>

    <div class="field">
      <%= f.label :number %>
      <em>(add 1 + area code w/ no spaces; i.e. 15555555555)</em><br/>
      <%= f.text_field :phone, :placeholder => @phone_number.phone_number %>
    </div>

  <div class="field">
    <%= f.label :email %><br />
    <%= f.email_field :email, autofocus: true %>
  </div>

当我这样做时,我得到 nil:NilClass 的“未定义方法‘phone_number’。 @phone_number 设置为与视图相同的控制器

...这里是对应的控制器

class Users::RegistrationsController < Devise::RegistrationsController
 before_filter :configure_sign_up_params, only: [:create]
 before_filter :configure_account_update_params, only: [:update]
 #before_filter :update_sanitized_params, if: :devise_controller?

  # GET /resource/sign_up
  def new
    @phone_number = PhoneNumber.find_or_create_by(phone_number: params[:phone_number][:phone_number])

    redirect_to welcome_index_path
   end

【问题讨论】:

  • 语法看起来是正确的,但由于某种原因,@phone_number 是 nil。您能否发布设置@phone_number 的控制器?
  • 类 PhoneNumbersController
  • 抱歉,不小心按回车并发送了错误的文字。这是在我由 Devise 设置的注册控制器中:
  • class Users::RegistrationsController
  • @ztredded 再次编辑问题并发布控制器操作代码。不要放在 cmets 中。

标签: ruby-on-rails placeholder form-for


【解决方案1】:

redirect_to 创建一个新的 HTTP 请求,并且像 @phone_number 这样的实例变量不会在请求之间保持不变。相反,您可以直接从此控制器操作中render 视图:

def new
  @phone_number = PhoneNumber.find_or_create_by(phone_number: params[:phone_number][:phone_number])
  render welcome_index_path
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    相关资源
    最近更新 更多