Ruby on rails Rails 3嵌套资源:can';无法使用表单或页面

Ruby on rails Rails 3嵌套资源:can';无法使用表单或页面,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我目前正在为社交网站开发一个web应用程序,但似乎不可能让我的嵌套资源正常工作。如果你能帮助我,那就太好了,我将非常感激 这是我的路线。我想要像mysite.com/username/photos/(新建、编辑等)这样的url结构。url结构与此类似,但我在尝试访问表单或页面时出错。下面我已经发布了到目前为止我所拥有的 routes.rb resources :users do resources :photos end belongs_to :users has

我目前正在为社交网站开发一个web应用程序,但似乎不可能让我的嵌套资源正常工作。如果你能帮助我,那就太好了,我将非常感激

这是我的路线。我想要像mysite.com/username/photos/(新建、编辑等)这样的url结构。url结构与此类似,但我在尝试访问表单或页面时出错。下面我已经发布了到目前为止我所拥有的

routes.rb

   resources :users do  
   resources :photos  
   end 
belongs_to :users
has_many :photos, :foreign_key => "id", :dependent => :destroy
 def new
  @photo = Photo.new(params[:photo])
 end
photo.rb

   resources :users do  
   resources :photos  
   end 
belongs_to :users
has_many :photos, :foreign_key => "id", :dependent => :destroy
 def new
  @photo = Photo.new(params[:photo])
 end
user.rb

   resources :users do  
   resources :photos  
   end 
belongs_to :users
has_many :photos, :foreign_key => "id", :dependent => :destroy
 def new
  @photo = Photo.new(params[:photo])
 end
\u form.html.erb
此表单有一个使用回形针的附件。有一个不确定这是否是问题所在,但您的
标签的
表单\u的格式似乎不正确。在指定用户后,您将关闭
表单_上的括号,以便
标记,因此它将忽略
:html
部分。我想试试这个:

<%= form_for([@photos, @user], :html => {:multipart => true}) do |f| %>
{:multipart=>true})do | f |%>
@photos
@user
必须作为数组传入


另外,不确定为什么
@photos
参数是复数。它不应该是
[@photo,@user]
?不过,我可能在这方面错了。

您需要创建一个before\u过滤器来获取用户,并创建表单posts,而不是新建。您的照片控制器应类似于:

before_filter :get_user
...

def new
  @photo = @user.photos.build
end

def create
  @photo = @user.photos.build(params[:photo])
  respond_to do |format|
    if @photo.save
      format.html {redirect_to [@user, @photo], notice: "Photo saved!"}
    else
      format.html {render action: "new"}
    end
  end
end
...
private
def get_user
  @user = User.find(params[:user_id])
end
在这里,before_过滤器抓取用户。在嵌套路由中,父资源ID将位于
params[:parent\u ID]
中,或者在本例中为
params[:user\u ID]
。然后在create控制器中,您需要从
@user.photos
集合构建一张照片。这将自动在照片和用户之间创建引用


此外,您的表单_for具有向后的关系。它应该是([@user,@photo])的
表单,
,而不是相反。

您得到的错误是什么,在哪里

有几件事: 在
photo.rb
中:

belongs_to :user
而不是
用户

您正在尝试从
用户#新建
页面创建照片吗?如果是,请尝试查看
接受嵌套属性\u以了解
用法:
在
user.rb中

has_many :photos, :dependent => :destroy
accepts_nested_attributes_for :photo
然后,在您的
用户#新
表单上:

<%= form_for @user, :html => {:multipart => true} do |f| %>
  # ... user attributes ...
  <%= f.fields_for :photo do |p| %>
    <%= p.file_field :name %>
  <% end %>
<% end%>
{:multipart=>true}do | f |%>
# ... 用户属性。。。

也可以考虑使用剪贴来代替上传。这是你的电话号码。祝你好运。

谢谢!过了一会儿就明白了。我没有更新控制器以包括我的新型号。你发布的视频也帮了我很多,再次感谢!谢谢你和小错误。我必须开始更仔细地查看我的代码。谢谢你指出它们!