在rails应用程序中,textarea具有逗号分隔值并保存表单。我想将逗号分隔值的计数保存到数据库而不是整个字符串。怎么算这个。 视图中的文本区域是:
<%= f.text_area :sent_to %>
传递给控制器的参数是:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"ag8WL59Swqo1TOFYfMOAC55VgoIxGSkleMXFDhUXYhO91zcPngas26MbpvMMyydNPSYntCfjAvKSh2R0TdQtbA==", "message_text"=>" ", "sms_type"=>"true", "staff_type"=>"Teaching", "message"=>{"sent_to"=>"34434343243, 7869851872", "organization_id"=>"4"}, "contact_nos"=>["34434343243, 7869851872"], "contact_no"=>["34434343243", "7869851872"]}
现在控制器有message_params动作
def message_params
params.require(:message).permit(:message_text, :sent_to, :no_of_message, :organization_id)
end
以下是保存数据的创建操作
def create
@message = Message.new(message_params)
respond_to do |format|
if @message.save
format.html { redirect_to @message, notice: 'Message was successfully created.' }
format.json { render :show, status: :created, location: @message }
else
format.html { render :new }
format.json { render json: @message.errors, status: :unprocessable_entity }
end
end
end
谢谢大家的回答,问题解决了,还有一件事我希望staff_type存储在sent_to中。为此,我做了,但它没有奏效。 @ message.sent_to = message_params [:message_text] [:staff_type]
答案 0 :(得分:2)
你可以做到
def create
@message = Message.new(message_params)
@message.sent_to = @message.sent_to.try(:split,",").try(:count)
end
<强>更新强>
根据您的评论我想,您想要将sent_to
次和staff_type
保存在相同的属性sent_to
中?
您一次只能保存一个,或者您必须序列化该属性,并且可以将sent_to
和staff_type
保存为对象。但是如果使用sent_to
的搜索查询太多,则不建议使用序列化列。
如果您想单独保存staff_type
,则应使用
@message.sent_to = params[:staff_type]
答案 1 :(得分:0)
这应该有用。
sent_to_count = message_params[:message][:sent_to].split(",").count
答案 2 :(得分:0)
试试这个
count = params[:message]['sent_to'].split(",").count
希望这对你有用。
答案 3 :(得分:0)
您不应该在控制器中执行此类操作。更标准的方法是在模型中执行此操作。创建一个before validation回调方法,并将其附加到其原点附加计数。通过这种方式,您可以在从不同级别的URL更新相同操作时担心。
更新您的参数权限:
before_validation: :append_send_to_count
def append_send_to_count
if sent_to.present? and sent_to_changed?
seld.sent_to_count = sent_to.split(',').size
end
end
答案 4 :(得分:0)
存储其他值以及sent_to
number_array=params[:message][:sent_to]
@final_array=[]
number_array.split(",").flatten.compact.each do |number|
@final_array << {:number => number, :staff_type => message_params[:message_text][:staff_type]}
##something like @final_array[0] will give
##{:123456=>123456,:staff_type=>Teaching}
##@final_array[0][:12345] will give 12345
##@final_array[0][:staff_type] will give "Teaching"
end