我有两个表格,positions
表格包含字段id
,position_id
,first_name
和last_name
。另一个表格为positionslist
,其中包含字段id
,positions
。我如何才能加入这两个表?
这是我的位置控制器:
class PositionsController < ApplicationController
def index
#@positions = Position.all(:order=>'updated_at DESC')
@positions = Position.joins(:positions => :positionlists)
end
def new
@position = Position.new
end
def create
@position = Position.new(params.require(:position).permit(:position_id, :first_name, :last_name))
if @position.save
redirect_to(:controller=>'positions')
else
render 'new'
end
end
def edit
@position = Position.find(params[:id])
end
def update
@position = Position.find(params[:id])
if @position.update(params.require(:position).permit(:position_id, :first_name, :last_name))
redirect_to(:controller=>'positions')
else
render 'edit'
end
end
def destroy
@position = Position.find(params[:id])
@position.destroy
redirect_to(:controller=>'positions')
end
end
我的模特位置.rb
class Position < ActiveRecord::Base
has_many :positionlists
has_many :positionlists , :through => :positions
validates :first_name, length: { in: 4..20}
validates :last_name, length: { in: 4..20}
end
我的模特位置列表.rb
class Positionlists < ActiveRecord::Base
has_many :positions
end
任何我的位置index.html.erb
<% content_for :title, "Positions" %>
<%= render "layouts/nav" %>
<div class="clear"></div>
<h1>Positions List</h1>
<%= link_to "Add", new_position_path, :class =>'btn btn-success' %>
<br />
<br />
<table class="table">
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Position</th>
<th>Options</th>
</tr>
<% @positions.each do |positions| %>
<tr>
<td><%= positions.first_name %></td>
<td><%= positions.last_name %></td>
<td><%= positions.position_id %></td>
<td>
<%= link_to "Edit", edit_position_path(positions)%> |
<%= link_to "Delete", position_path(positions),
method: :delete, data:{confirm: 'Are you sure you want to delete this?.' }%>
</td>
</tr>
<% end %>
</table>
非常感谢任何帮助!感谢
答案 0 :(得分:0)
Rails会为您解决此问题。
class PositionList < ActiveRecord::Base
has_many :positions
end
class Position < ActiveRecrod::Base
belongs_to :position_list
end
为简单起见,您的position
也需要position_list_id
列。如果我理解你在这里想做什么。
其他问题:命名您的班级PositionLists
而不是PositionList
会混淆Rails自动命名约定。
你的表中也有一组奇怪的列。对于你想要的东西,我可以告诉你的位置表需要有列:
first_name
last_name
id (automatic)
您的position_list表中似乎没有任何内容,因此在自动ID列之外没有您需要的列。该关联是Position
类中的belongs_to和位置表中的position_list_id
列自动生成的。
如果你想知道这一切有多么简单,可以尝试运行自动脚手架,看看它是如何完成的,并从中学习。也许生成一个新的Rails应用程序,然后运行这样的东西:
rails g scaffold position_list name
rails g scaffold position first_name last_name position_list:references
这将使您position_list.positions
获取任何position_list或Position.all的所有头寸,以获取所有头寸的列表。
听起来很多Rails对你来说都是新手。 Hartl的经典之作是一个很棒的介绍:http://ruby.railstutorial.org/ruby-on-rails-tutorial-book