我正在尝试将一些数据从视图发送到控制器。我正在使用表格。我有一个制造商控制器和一个用户控制器。每当我创建新制造商时我想做什么我也在创建具有特定值的新用户。所以我的表单包含很少的制造商值和很少的用户值。我通过以下方式尝试了这些事情:
// inside ManufacturersController
def new
@manufacturer = Manufacturer.new
@user = User.new
end
def create
@manufacturer = Manufacturer.new(manufacturer_params)
@user = User.new(user_params)
@manufacturer.save
redirect_to @manufacturer
end
private
def manufacturer_params
params.permit(:name, :license_no, :contact_no, :address, :country, :city, :pincode,:email_id)
end
def user_params
params.permit(:email, :password, :confirm_password)
end
// inside form view
<div class="form-group">
<label class="col-sm-3 control-label">Email Id</label>
<div class="col-sm-3">
<input class="form-control" name="email_id" value="<%= @manufacturer.email_id %>">
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Password</label>
<div class="col-sm-6">
<input class="form-control" name="password" value="<%= @user.password %>">
</div>
以上代码未完成代码。我的表单字段密码出错了。它显示错误undefined method password for #<User:0x7a42580>
我做错了吗?需要一些帮助。谢谢。
答案 0 :(得分:1)
在Rails中,您可以使用哈希值传递参数:
user: { name: 'Max' }
内置表单助手如何工作,这是一个很好的做法。
创建表单时,您可以使用表单助手为输入获取正确的html name
属性。
<%= form_for(@user) do %>
<%= f.text_field :email # user[name] %>
<%= f.password_field :password # user[password] %>
<% end %>
Rails会将@user.email
的值绑定到电子邮件字段。
如果您想一次创建多个记录,可以使用accepts_nested_attributes_for:
class Manufacturer < ActiveRecord::Base
has_many :users
accepts_nested_attributes_for :users
validates_associatiated :users
end
class User < ActiveRecord::Base
belongs_to :manufacturer
end
这使您可以Manufacturer.new(name: 'Acme Corp', users_attibutes: [{ name: 'Max' }])
同时创建制造商和嵌套用户。
这是设置控制器的方法
class ManufacturersController
# ...
def new
@manufacturer = Manufacturer.new
@manufacturer.users.build
end
def create
@manufacturer = Manufacturer.create(manufacturer_params)
# ...
end
private
def manufacturer_params
params.require(:manufacturer)
.permit(
:name, :license_no, :contact_no, :address, :country,
:city, :pincode, :email_id,
users_attributes: [:email, :password, :confirm_password]
)
end
end
你的表格:
<%= form_for(@manufacturer) do |f| %>
<%= f.text_field :name # manufacturer[name] %>
<%= f.text_field :license_no %>
...
<%= f.fields_for(:users) do |user_fields| %>
<%= user_fields.text_field :email # manufacturer[users_attibutes][1][email] %>
...
<% end &>
<% end %>
正如@Venkat ch已经指出在数据库中存储明文密码真是不安全。请改用has_secure_password
。