0

我正在为大学开发一个应用程序,用户可以在其中登录并上传远足径的详细信息。

到目前为止,一切正常,我还为每条远足小径的照片实施了嵌套表格。用户可以登录并创建徒步旅行。

我想显示用户在显示/个人资料页面中创建的所有远足,但是当我在我的数据库中设置了关系并在我的模型中设置了has_many&belongs_to选项时。我也尝试过使用嵌套来做到这一点,accepts_nested_attributes_for :hikingtrails但这些都不起作用。

当用户创建远足路径时,我检查了我的数据库,它没有更新表中的 user_id 字段。

我不确定我是否以完全错误的方式接近这个问题,我应该查看多态关联吗?

class User < ActiveRecord::Base
  attr_accessible :user_name, :email, :password, :password_confirmation, :photos_attributes,  :hikingtrails_attributes


  has_many :hikingtrails
  accepts_nested_attributes_for :hikingtrails, :allow_destroy => :true, :reject_if => :all_blank




class Hikingtrail < ActiveRecord::Base
  attr_accessible :description,  :name, :looped, :photos_attributes,:directions_attributes, :user_id


    has_many :photos
    has_many :trails
    has_many :directions
    belongs_to :user

用户/show.html.erb

<div class="page-header">
  <h1>Your Profile</h1>
</div>


<p>
  <b>username:</b>
  <%= @user.user_name %>
</p>

<p>
  <b>email:</b>
  <%= @user.email %>
</p>

<h4>Small Photos</h4>
<% @user.photos.each do |photo| %>
<%= image_tag photo.image_url(:thumb).to_s %>
<% end %>

<h4>Hiking Trails</h4>
<% @user.hikingtrails.each do |hk| %>
<%= hk.name %>
<% end %>

<%= link_to "Edit your Profile", edit_user_path(current_user), :class => 'btn btn-mini' %>
4

1 回答 1

1

您没有:user_id在 Hikingtrail 模型中添加可访问属性。尝试以下操作:

attr_accessible :description, 
                                  :duration_hours, 
                                  :duration_mins, 
                                  :name, 
                                  :looped,
                                  :addr_1,
                                  :addr_2,
                                  :addr_3,
                                  :country,
                                  :latitude,
                                  :longitude,
                                  :photos_attributes,
                                  :trails_attributes,
                                  :directions_attributes,
                                  :user_id

更新:看到表单代码后,我认为可能没有必要执行上述操作,并且也可能不安全。相反,不要通过批量分配设置 user_id,而是在控制器中处理用户分配,如下所示:

class HikingtrailsController < ApplicationController
  # ...
  def create
    @hikingtrail = Hikingtrail.new(params[:hikingtrail])
    @hikingtrail.user = current_user
    if @hikingtrail.save
      # ...
    else
      # ...
    end
  end
end

希望这可以帮助 :)

于 2013-04-08T12:55:54.057 回答