ruby-on-rails – form_for – Ruby on Rails
我不明白form_for.
我尝试实现这个tutorial,我不明白视图代码. >什么是:as => :用户说? 谢谢你的帮助! 解决方法
一点解释(
form_for documentation here):
<%= form_for @user,:as => :user,:url => sign_in_path(@user) do |f| %> 点1.:as => :用户 这是用于生成输入名称(和参数名称)的名称,例如: = 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约定,不会直接在视图中调用Model的名称,并且不建议在视图中引发SQL查询. 例: ######## WRONG # view <%= Post.find(params[:id]).title %> ######## MUCH BETTER # controller's action: def show @post = Post.find(params[:id]) # view <%= @post.title %> 控制器动作中设置的实例变量在动作及其视图及其部分视图之间共享. 点5.在form_for中执行/结束块 此时请提供您的意见,不知道如何解释 这部分代码被称为do / end块,它表示将在form_for的上下文中执行的一段代码.我们使用form_for的实例作为管道中定义的变量,这里是| f |.我通常不使用| f |,这与我并不真正相关.我更喜欢使用这种变量名: = form_for @user do |user_form_builder| = user_form_builder.input :username 我认为这是更可读和更容易理解. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |