0

我有一个应用程序,用户可以在其中提交项目。对于每个字段,他们可以选择将新数据放入数据库,或者从过去的项目中选择旧数据来填充该字段。

在我的新视图中,我无法让它适用于这段代码:

<%= form_for(@technol) do |tech| %>   

<%= fields_for(@project_technol) do |ab| %>

<%=  text_field_tag :tech, nil, :maxlength => 30 %>
OR<br />

<%= ab.label "All Tech"%> </br>
<%= collection_select( :technols, :id, Technol.all, :id, :tech, {}, {:multiple => true } ) %>
</div>
<% end %>

<% end %>

目前,用户可以从 collection_select 中选择许多技术,并将它们与项目一起保存,但我试图让他们选择通过文本框将自己的技术放入其中。

我的控制器动作:

新的

def new
   @project = Project.new
   @technol = Technol.new(params[:tech])

   @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])


params[:technols][:id].each do |tech|

if !tech.empty?

@project.projecttechnols.build(:technol_id => tech) 

end

end

    respond_to do |format|
      if @project.save
        format.html { redirect_to @project, notice: 'Project was successfully created.' }
        format.json { render json: @project, status: :created, location: @project }
      else
        format.html { render action: "new" }
        format.json { render json: @project.errors, status: :unprocessable_entity }
      end
    end
  end

总而言之,我希望用户可以选择将新技术输入数据库,并从下拉列表中选择现有技术,然后将所有技术保存在项目中,并将输入的新技术保存在技术表中。

有任何想法吗?我是一个 Rails 菜鸟,所以在尝试回答时请记住这一点。任何帮助都感激不尽。提前致谢

4

2 回答 2

0

使用令牌字段而不是下拉和文本字段怎么样?

检查修订后的 RailsCast: http: //railscasts.com/episodes/258-token-fields-revised

如果您没有订阅 RailsCast,这是免费的原始屏幕截图: http ://railscasts.com/episodes/258-token-fields

于 2012-10-04T12:51:44.777 回答
0

我建议您使用接受多个值的自动完成功能。这将改善您的视图,并且编码将很容易

于 2012-10-04T13:17:48.057 回答