0

我已将 bsmSelect 插件合并到我的 Ruby on Rails 应用程序中,但无法保存我所做的选择。我已经实现了 bsmSelect 到可以在我的选择中定义所有数据字段的程度,我可以将它们添加到列表中,删除它们等(例如,请参见此处 - 我基本上实现了“示例 1”:bsmSelect演示

我无法将“提交”按钮绑定到 Ruby on Rails“创建”操作。我想获取已选择的项目,单击“提交”按钮,然后创建一个新项目,其中仅包含我选择要保存的那些字段。我已将资源定义为 RESTful,并在我的控制器中定义了 create、new 和 show 方法。

请帮助我执行“创建”操作,该操作将仅显示我使用 bsmSelect 选择的该模型中的数据字段。下面的代码片段:

视图/application_templates/new.html.erb

<%= form_for(@apptemplate) do |f| %>
 <%= render 'test', f: f %>
 <%= f.submit "do it", class: "btn btn-large btn-primary" %>
<% end %>

“测试”部分

<select name="Fields" multiple="multiple" title="Please select parameters">
 <option><%= f.label :name %></option>
 <option><%= f.label :email %></option>
 <option><%= f.label :dob %></option>
</select>

控制器

def show
@apptemplate=ApplicationTemplate.find(params[:id])
end


def new
 @apptemplate=ApplicationTemplate.new
 respond_to do |format|
     format.html 
     format.js
 end
end

def create #create a new property
@apptemplate= ApplicationTemplate.new
if @apptemplate.save
    flash[:success] = "Template saved!"
    redirect_to @apptemplate
else 
    render 'new'
end
end

注意:示例字段(姓名、电子邮件、出生日期)当然是在我的模型中定义的

所以,假设我只选择了“姓名和出生日期”,我如何创建一个只显示“姓名和出生日期”由 bsmSelect 保存的新 AppTemplate?

谢谢!!

4

1 回答 1

0

在您的“测试”部分中,您需要输入以下内容:

<select id="fields" name="fields[]" multiple="multiple" title="Please select parameters">

这将创建一个您可以在 create 方法中访问的 params[:fields]。考虑到您的模型中有姓名、电子邮件和 dob 字段,您可以执行以下操作:

def create
  @template = Template.new
  params[:fields].each do |field|
    @template[field.downcase] = true
  end
  if @template.save
    redirect_to template_path(@template)
  else
    render 'new'
  end
end

注意“field.downcase”。它在那里是因为

<option><%= f.label :name %></option>

在视图中生成这个

<option>Email</option>
于 2014-05-22T03:25:25.583 回答