【发布时间】:2015-06-12 18:25:59
【问题描述】:
我刚开始学习 ruby on rails,我的第一个应用程序是一个有 4 个模型的办公室文件跟踪系统
- 拥有_many用户的Office模型
- 属于办公室的用户模型(设计)
- 包含多个跟踪器的文件模型
- belongs_to 文件和belongs_to 用户的跟踪器模型
我已经能够设置跟踪器和用户之间的关系如下:
跟踪器模型
class Tracker < ActiveRecord::Base
belongs_to :nasfile
belongs_to :sender, :foreign_key => :sender_id, class_name: 'User'
belongs_to :receiver, :foreign_key => :receiver_id, class_name: 'User'
end
用户模型
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable,:recoverable
devise :database_authenticatable, :registerable,
:rememberable, :trackable, :validatable,
:authentication_keys => [:username], password_length: 6..25
belongs_to :office
accepts_nested_attributes_for :office
has_many :sent_files,:class_name => 'Tracker', :foreign_key => 'sender_id'
has_many :received_files,:class_name => 'Tracker', :foreign_key => 'recepient_id'
def email_required?
false
end
def email_changed?
false
end
end
办公模式
class Office < ActiveRecord::Base
belongs_to :department
has_many :users
end
在跟踪器控制器中的创建操作中自动填充正在发送文件的用户
def create
@tracker = Tracker.new(tracker_params)
@tracker.sender_id = current_user.id
respond_to do |format|
if @tracker.save
format.html { redirect_to @tracker, notice: 'Tracker was successfully created.' }
format.json { render :show, status: :created, location: @tracker }
else
format.html { render :new }
format.json { render json: @tracker.errors, status: :unprocessable_entity }
end
end
end
并在我的索引视图中显示它
<tbody>
<% @trackers.each do |tracker| %>
<tr>
<td><%= tracker.nasfile %></td>
<td><%= tracker.sender.username if tracker.sender.present? %></td>
<td><%= tracker.receiver_id %></td>
<td><%= link_to 'Show', tracker %></td>
<td><%= link_to 'Edit', edit_tracker_path(tracker) %></td>
<td><%= link_to 'Destroy', tracker, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</tbody>
我现在的主要问题是,我对如何设置跟踪器和用户所属办公室之间的关系以自动填写 current_users 办公室感到困惑,这是该应用程序的主要本质,因为一个文件在办公室之间移动,但为了完整性,我希望用户始终附加到文件中,以防文件丢失,会有人负责。
任何帮助将不胜感激。
【问题讨论】:
-
你能用每个模型(不仅仅是跟踪器)的关系更新你的帖子吗?正确设置关系后,您应该拥有可用于引用所有相关实体的访问器(例如
User.office)。
标签: ruby-on-rails ruby-on-rails-4