我的 帐户 模型与 用户 模型有has_many
关系:
class Account < ActiveRecord::Base
has_many :users, -> { uniq }
accepts_nested_attributes_for :users
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :confirmable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
belongs_to :account
我使用回形针将 头像 属性添加到 用户 模型。
我希望每个用户都可以访问常用帐户设置,并且可以在其内部上传他/她自己的头像。
我使用simple_form,所以我尝试了这个:
<%= simple_form_for current_account, :html => { :multipart => true } do |f| %>
<%# here come account settings %>
<%= f.input :time_zone, :label => t(".timezone"),
:
:
<%# here I need to access current user attributes %>
<%= f.simple_fields_for :user, current_account.users.first do |user_form| %>
<%= user_form.file_field :avatar, :error => false %>
<% end %>
<% end %>
第一个问题:
我需要一些逻辑来访问current_user而不是current_account.users.first
。由于有一个superadmin可以访问所有帐户,因此使用current_user
是不够的。
第二个(也就是更大)问题:
我在控制器中添加了头像参数到白名单:
def allowed_params
params.require(:account).permit(:time_zone, :logo, :description, user: [:avatar])
end
当我尝试更新我的模型时:
if current_account.update(allowed_params)
我收到此错误:
unknown attribute: user
我也尝试过:
params.require(:account).permit(:language, :time_zone, :logo, :description, :user_attributes => [:avatar])
和
params.require(:account).permit(:language, :time_zone, :logo, :description, :users_attributes => [:avatar])
(复数形式)
但是因为我使用ActionController::Parameters.action_on_unpermitted_parameters = :raise
我得到了:
found unpermitted parameters: user
这一定很容易,有些帮助吗?
答案 0 :(得分:1)
好的,明白了!
问题是一对多关系以及我尝试访问单个用户实例的方式。正确的方法是:
<% current_account.users.each_with_index do |user, index|%>
<%= f.simple_fields_for :users, user do |user_form| %>
<%= user_form.file_field :avatar, :error => false %>
<% end %>
<% end %>
正如您所看到的,迭代应该在关系上完成,并且只有在有了
单一实例&#34;手中&#34;我们可以使用simple_fields_for
。
另请注意,传递给simple_fields_for
的第一个参数是:users
而不是:user
,因为这是一对多的关系。