Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails—仅更新部分模型的_属性;文件上传_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails rails—仅更新部分模型的_属性;文件上传

Ruby on rails rails—仅更新部分模型的_属性;文件上传,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我想添加一个用户的能力,以有几个图片与他/她的用户帐户 我有以下课程: class User < ActiveRecord::Base has_many :assets accepts_nested_attributes_for :assets end class Asset < ActiveRecord::Base belongs_to :assetable, :polymorphic => true belongs_to :user end 表格: &l

我想添加一个用户的能力,以有几个图片与他/她的用户帐户

我有以下课程:

class User < ActiveRecord::Base
  has_many :assets
  accepts_nested_attributes_for :assets
end

class Asset < ActiveRecord::Base
  belongs_to :assetable, :polymorphic => true
  belongs_to :user
end
表格:

<%= form_for @user do |u| %>
  <%= u.fields_for :assets do |asset| %>
    <%= asset.file_field :asset %>
    <%= asset.text_field :description %><br />
  <% end %>
  <%=u.submit %>
<% end %>
但我得到了一个错误:

nil:NilClass的未定义方法“update\u attributes”

因为我只有资产字段,所以我需要做什么特殊的事情吗?另外,由于用户存在,这会导致问题吗? 基本上:

asset:
  user_id: 
  assetable_type:
  assetable_id:
任何帮助都将不胜感激。不要做太多的事情

thx

编辑#1

class UsersController

thx

好的-这里的代码有一些问题。我强烈建议您阅读和指南,以获得有关这方面的更多信息

在任何情况下,您都会收到错误,因为您所在的表单将尝试使用
users\update
中的
userscoontroller
操作

你有两个选择。一种是为自定义操作创建必要的路由,或者您可以创建一个嵌套资源,并创建一个用于添加资源的表单

在这种情况下,您可以这样做:

<%= form_for @asset do |f| %>
  <%= f.file_field :asset %>
  <%= f.text_field :description %><br />
  <%=f.submit %>
<% end %>
routes.rb中

resources :users do
  resources :assets, :only => [:new, :create] # Or any other actions you might want. It's best practise to limit these.
end
然后,在
AssetController
中,您可以执行类似的操作:

def new
  @asset = Asset.new
end

def create
  @asset = Asset.new(params[:asset])
  @asset.user_id = params[:user_id] if params[:user_id]
  @asset.save!
end
您的表单将如下所示:

<%= form_for @asset do |f| %>
  <%= f.file_field :asset %>
  <%= f.text_field :description %><br />
  <%=f.submit %>
<% end %>



您能在控制器中粘贴相关操作的代码吗?谢谢回答。那么,嵌套资源的url是否为
/users/1/assets/edit
?此外,这会处理所属对象和多态关系吗?thx再次关注这一点——我知道它正在使用用户更新;这就是使用嵌套属性的目的。由于id是在post的参数中传递的,因此它似乎应该可以工作。
def new
  @asset = Asset.new
end

def create
  @asset = Asset.new(params[:asset])
  @asset.user_id = params[:user_id] if params[:user_id]
  @asset.save!
end
<%= form_for @asset do |f| %>
  <%= f.file_field :asset %>
  <%= f.text_field :description %><br />
  <%=f.submit %>
<% end %>