开发者

collection_select with has_many :through relationship table data

开发者 https://www.devze.com 2023-03-13 01:36 出处:网络
I have such terrible models: class ParentalRelation < ActiveRecord::Base b开发者_高级运维elongs_to :parent

I have such terrible models:

class ParentalRelation < ActiveRecord::Base
  b开发者_高级运维elongs_to :parent
  belongs_to :student
  belongs_to :counselor
  belongs_to :parental_relation_type
end

class ParentalRelationType < ActiveRecord::Base
  has_many :parental_relations
end

class Parent < ActiveRecord::Base
    has_many :parental_relations
    has_many :students, :through => :parental_relations
    has_many :counselors, :through=> :parental_relations
    has_many :parental_relation_types, :through=> :parental_relations
    belongs_to :user, :dependent=> :destroy
    belongs_to :occupation_type
    accepts_nested_attributes_for :user
end

Parental relation types are like father, mother, etc. The reasoning is that a parental relation between one counselor, one parent and one student is unique and counselors should not see the relations that belong other counselors.

In controllers/parent_controller/edit action I have:

@parental_relation= ParentalRelation.find_by_counselor_id_and_student_id_and_parent_id(x, y, z)

In views/parent/_form.html.erb I have:

<%= form_for @parent do |f| %>

inside that form I need a collection_select for ParentalRelationType.all and select the parent's parental_relation_type_id for that particular parental relation, but I can't find the syntax to do it.

I tried adding

<%= collection_select(@parental_relation, :parental_relation_type_id, ParentalRelationType.all, :id, :name) %>

underneath the form_for, but the relation type id is 2, and default 1 is selected instead.


Added this to parents/_form

<%= fields_for @counselor_student_parent do |csp| %>
    <%= f.label :parental_relation_type_id %>
    <%= collection_select(:student_counselor_parent, :parental_relation_type_id, ParentalRelationType.all, :id, :name) %>
<% end %>

And this to parents_controller/new

def new
    @counselor= Counselor.find(params[:counselor_id])
    @student= Student.find(params[:student_id])
    @parent= @student.parents.build
    @parent_user= @parent.build_user
    @counselor_student_parent= @counselor.student_counselor_parents.build
end
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号