外键不更新

时间:2013-04-08 12:46:11

标签: ruby-on-rails ruby-on-rails-3 nested-attributes has-many polymorphic-associations

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

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

我想显示用户在show / profile页面中创建的所有徒步旅行,但是当我在我的数据库和我的数据库中建立关系时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' %>

1 个答案:

答案 0 :(得分: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

希望这会有所帮助:)