我有一个应用程序,用户可以将项目输入数据库。
他们可以选择为项目选择多种不同的技术。目前,如果用户未选择至少1项技术,应用程序会标记错误。
我想要改变它,以便如果他们不选择技术,它会自动变为“其他”。
这是我的项目控制器操作,new和create:
def new
@project = Project.new
@technol = Technol.new(params[:tech])
@all_technols = Technol.order('tech ASC')
@all_technols = Technol.all
tech_ids = params[:technols][:id].reject(&:blank?) unless params[:technols].nil?
@project_technol = @project.projecttechnols.build
respond_to do |format|
format.html # new.html.erb
format.json { render json: @project }
end
end
def create
@project = Project.new(params[:project])
@project.client = params[:new_client] unless params[:new_client].blank?
@project.industry = params[:new_industry] unless params[:new_industry].blank?
@project.business_div = params[:new_business_div] unless params[:new_business_div].blank?
if !params[:technols].nil?
params[:technols][:id].each do |tech|
if !tech.empty?
@project_technol = @project.projecttechnols.build(:technol_id => tech)
end
end
end
以下是技术领域的新视图
<ul>
<% @all_technols.each do |technol| %>
<li class="split">
<%= check_box_tag "project[technol_ids][]", technol.id, @project.technols.include?(technol) %>
<%= technol.tech %>
</li>
<% end %>
</ul>
技术表中“其他”的技术ID为“18”。那么有没有办法说如果没有选择技术,那么:technol_id => ["18"]
。
我还是铁杆的新手,所以在尝试帮助时请记住这一点。非常感谢
答案 0 :(得分:1)
你有两个选择。
首先,向表单添加隐藏的输入:
<input type="hidden" name="project[technol_ids][]" value="18" />
其次,更新控制器#action中的参数:
def create
...
technol_ids = params[:technol_ids].blank? ? [18] : params[:technol_ids]
technol_ids.each do |id|
...
end
...
end
答案 1 :(得分:0)
您可以做的是编写迁移并设置列的默认值,如下所示
add_column :users, :technology, :string, :default => "other"
所以即使用户不会选择任何值,默认也不会是nil