【发布时间】:2014-03-14 19:57:08
【问题描述】:
我有一个模型 CommunityPartner 与另一个模型 PartnerTag 有 has_and_belongs_to_many 关系。
class CommunityPartner < ActiveRecord::Base
VALID_EMAIL = /\A[\w+\-.]+@{1}[a-z\d\-.]+\.[a-z]+\z/i
validates(:name, presence: true, uniqueness: true)
validates(:email, presence: true, confirmation: true,
format: { with: VALID_EMAIL })
validates(:contact_method, presence: true)
validates(:email_confirmation, presence: true)
validates(:address, presence: true)
validates(:phone_number, presence: true)
validates(:description, presence: true)
has_many(:projects, dependent: :destroy)
has_and_belongs_to_many(:partner_tags)
has_secure_password
def create_tag_list(tag_list)
tag_list.each do |tag|
t = PartnerTag.new(name: tag.name)
self.partner_tags << t
end
end
end
class PartnerTag < ActiveRecord::Base
validates(:name, presence: true)
has_and_belongs_to_many(:community_partners)
end
我已经成功地为一个新的合作伙伴创建了一个表单,除了一件事:合作伙伴的标签。我创建了一个从数组创建标签列表的方法。该数组由一个方法组成,该方法接受一个字符串并用空格分隔它(它在下面的控制器中)。如何自定义 params 哈希,以便我可以包含表单中专门用于标签字符串的自定义参数?或者,有没有更好的方法来做到这一点?
这是控制器代码:
class CommunityPartnersController < ApplicationController
def index
@all_partners = CommunityPartner.all
end
def new
@new_partner = CommunityPartner.new
end
def create
# create tag list from string passed in params[:community_partner][:pa rtner_tags]
# append each tag in list to partner instance
@new_partner = CommunityPartner.new(allowed_community_partner_params)
@new_partner.create_tag_list(parse_tags(params[:tags]))
if(@new_partner.save)
redirect_to(@new_partner)
else
render(:new)
end
end
def edit
end
def show
@partner = CommunityPartner.find(params[:id])
end
def update
end
def destroy
end
def parse_tags(tag_list)
tag_list.split(/ /)
end
private
def allowed_community_partner_params
params.require(:community_partner).permit(:name, :email,
:display_email, :email_confirmation, :contact_method,
:password, :password_confirmation, :phone_number,
:address, :description)
end
end
【问题讨论】:
标签: ruby-on-rails forms controller params has-and-belongs-to-many