我是Ruby on Rails和Web开发的新手,当我遇到一个非常令人困惑的代码时,他正在关注youtube上的rails教程。代码是:
def create
@user = User.new(params[:user])
end
我无法理解“:user”键的来源或它的价值。我一直在尝试阅读关于红宝石中的符号和哈希的所有内容,但它让我更加困惑。起初,教程中有这个代码:
def show
@user = User.find(params[:id])
@title = @user.name
end
我理解“params [:id]”是一个带键值的哈希:id,其中:id => (在数据库中的id)但是使用params [:user],我只是迷路了。我没有“user”列,但我的模型名为“user”。
因此,我的简单问题是......关键字“:user”来自何处以及它的价值是什么?
答案 0 :(得分:1)
它来自你的形式
= form_for(@user, :url => url) do |f|
= render 'shared/error_explanation', :object => @user
= f.label t('users.email')
= f.text_field :email, :autocomplete => 'off'
= f.label t('users.password')
= f.password_field :password, :autocomplete => 'off'
= f.label t('users.password_confirmation')
= f.password_field :password_confirmation, :autocomplete => 'off'
%br
= f.submit :class => 'btn'
它生成类似
的内容<form accept-charset="UTF-8" action="/users/create_by_admin" id="new_user" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /><input name="authenticity_token" type="hidden" value="xxx=" /></div>
<label for="user_Email">Email</label>
<input autocomplete="off" id="user_email" name="user[email]" size="30" type="text" value="" />
<label for="user_password">password</label>
<input autocomplete="off" id="user_password" name="user[password]" size="30" type="password" />
<label for="user_password confirmation">password confirmation</label>
<input autocomplete="off" id="user_password_confirmation" name="user[password_confirmation]" size="30" type="password" />
<br>
<input class="btn" name="commit" type="submit" value="Create user" />
</form>
查看名称属性。因此params
将与{"utf8"=>"✓", "authenticity_token"=>"xxx=", "user"=>{"email"=>"qwerty@qwerty.qw", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Create user"}
User.creae
方法使用模型的属性获取哈希值。
答案 1 :(得分:0)
在表单发布后检查开发日志。 params发送为
'user' => {'id' => 'someID', 'name' => 'someName', 'email' =>'some email' }
因此应该有一个包含所有字段数据的用户Hash。您只能捕获控制器中params[:user]
中的值,如下所示:user是父Hash。
答案 2 :(得分:0)
要创建新用户,我们将在下面执行此操作。
<%= form_for :user do |f| %>
......
<% end %>
当您调用form_for时,您将传递此表单的标识对象。在这种情况下,它是符号:user
。
在控制器方面,我们将如下所示在数据库中创建用户记录
def create
@user = User.new(params[:user])
end
通过params[:user].inspect
,您可以看到将要向控制器查看的内容。
params
方法是表示来自表单的parameters
(或字段)的对象。 params方法返回一个ActiveSupport :: HashWithIndifferentAccess对象,它允许您使用字符串或符号访问哈希的键。