Ism*_*moh 20 ruby ruby-on-rails ruby-on-rails-4
我不明白form_for.
我尝试实现本教程,但我不理解视图代码.
此外,我不明白api,否则我不会在这里问...
<%= form_for @user, :as => :user, :url => sign_in_path(@user) do |f| %>
:as => :user说什么?:url => sign_in_path很清楚,但为什么会(@user)背后呢?@user不同的访问权限View?application.html.erb(布局)中使用log-in-form ,但是@user它位于user_controller.rb和不在application_controller.rb.<%= form_for (User.new), ... 运作良好,但我认为这是不对的..do |f| %>谢谢你的帮助!
MrY*_*iji 35
<%= form_for @user, :as => :user, :url => sign_in_path(@user) do |f| %>
第1点. :as => :user
这是用于生成输入名称(和params'名称)的名称,例如:
= form_for Admin.new, as: :user do |f|
                          #^^^^
  = f.input :username
# will generate an input like this:
<input type='text' name='user[username]' #... />
                        #^^^^
第2点. :url => sign_in_path(@user)
在教程中,@user设置如下:
  def sign_in
    @user = User.new
  end
第3点. @user可用于其他操作
您必须在您想要的每个操作中设置此变量.它可能是多余的,因此您可以使用before_filter来验证@user在您想要的每个操作上设置变量:
class UsersController < ApplicationController
  before_filter :set_user_variable
  def set_user_variable
    @user ||= User.find(session[:user_id]) if session[:user_id].present?
  end
end
如果您想在应用程序的任何位置使其可用(意味着您必须连接到用户帐户才能浏览应用程序):
class ApplicationController < ActionController::Base
  before_filter :set_user_variable, except: [:sign_in, :login]
  def set_user_variable
    @user ||= User.find(session[:user_id]) if session[:user_id].present?
  end
第4点. form_for (User.new)
我们@user在控制器中设置变量并将其作为参数传递,form_for因为它是一个Rails惯例,永远不会直接在视图中调用模型的名称,并且不推荐使用它来激发视图中的SQL查询.
例:
######## WRONG
# view
<%= Post.find(params[:id]).title %>
######## MUCH BETTER
# controller's action:
def show
  @post = Post.find(params[:id])
# view
<%= @post.title %>
在Controller的Action中设置的实例变量在动作,视图和部分视图之间共享.
点5.在form_for中执行/结束块
请在此时提供您的意见,不知道如何解释
这部分代码称为do/end块,它表示将在上下文中执行的一段代码form_for.我们使用form_for的实例作为管道中定义的变量,就在这里|f|.我通常不使用|f|,它与我无关.我更喜欢使用这种变量名:
= form_for @user do |user_form_builder|
  = user_form_builder.input :username
我认为这更易读,更容易理解.
| 归档时间: | 
 | 
| 查看次数: | 20645 次 | 
| 最近记录: |