Ruby on rails Rails 3嵌套资源:can';无法使用表单或页面
我目前正在为社交网站开发一个web应用程序,但似乎不可能让我的嵌套资源正常工作。如果你能帮助我,那就太好了,我将非常感激 这是我的路线。我想要像mysite.com/username/photos/(新建、编辑等)这样的url结构。url结构与此类似,但我在尝试访问表单或页面时出错。下面我已经发布了到目前为止我所拥有的 routes.rbRuby 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
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 |%>
# ... 用户属性。。。
也可以考虑使用剪贴来代替上传。这是你的电话号码。祝你好运。
谢谢!过了一会儿就明白了。我没有更新控制器以包括我的新型号。你发布的视频也帮了我很多,再次感谢!谢谢你和小错误。我必须开始更仔细地查看我的代码。谢谢你指出它们!