0

我有一个允许用户将项目输入数据库的应用程序。

他们可以选择通过文本框为某个字段输入新数据,也可以通过下拉菜单选择之前为该字段输入的数据。

如果用户填写表单,然后单击提交,但出现问题,比如他们错过了其中一个字段,页面会标记一个错误,说明缺少哪些字段,这很好。

但是,如果用户在文本框中输入了新数据,则会将其删除,并选择下拉列表中的第一个选项。

这是我的项目控制器:

class ProjectsController < ApplicationController


before_filter :authenticate_user!
#:except => [:show, :index]




    def index
        @projects = Project.all

respond_to do |format|
      format.html # index.html.erb
      format.json { render :json => @projects }
    end
  end

  # GET /projects/1
  # GET /projects/1.json
  def show
    @project = Project.find(params[:id])
        @project_project_id = params[:id]

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @project }
    end
  end

  # GET /projects/new
  # GET /projects/new.json
  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

  # GET /projects/1/edit
  def edit
    @project = Project.find(params[:id])
        @project_technol = @project.projecttechnols.build



puts @project.inspect
puts @project.technols.inspect
  end

  # POST /projects
  # POST /projects.json
  def create    
    @project = Project.new(params[:project])
        @project.client = params[:new_client] unless params[:new_client].blank?
        @project.role = params[:new_role] unless params[:new_role].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

    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

  # PUT /projects/1
  # PUT /projects/1.json
  # PUT /projects/1
  # PUT /projects/1.json
  def update


    @project = Project.find(params[:id])

puts @project.inspect
puts @project.technols.inspect
        @project.client = params[:new_client] unless params[:new_client].blank?
        @project.role = params[:new_role] unless params[:new_role].blank?
        @project.industry = params[:new_industry] unless params[:new_industry].blank?
        @project.business_div = params[:new_business_div] unless params[:new_business_div].blank?


    respond_to do |format|
      if @project.update_attributes(params[:project])
        format.html { redirect_to @project, notice: 'Project was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: "edit" }
        format.json { render json: @project.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /projects/1
  # DELETE /projects/1.json
  def destroy
    @project = Project.find(params[:id])
    @project.destroy

    respond_to do |format|
      format.html { redirect_to projects_url }
      format.json { head :no_content }
    end
  end




private

  helper_method :sort_column, :sort_direction
  def sort_column
    Project.column_names.include?(params[:sort]) ? params[:sort] : "project_name"
  end

  def sort_direction
    %w[asc desc].include?(params[:direction]) ? params[:direction] : "asc"
  end

    def per_page
      params[:per_page] ||= 1
    end
    def page 
      params[:page] ||= 1
   end
end

这是我的一些新项目视图

<%= stylesheet_link_tag "new" %>


<h1>Create New Project</h1>
<HTML>

<%= stylesheet_link_tag "form" %>


<%= form_for(@project) do |f| %>


  <% if @project.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@project.errors.count, "error") %> prohibited this project from being saved:</h2>

      <ul>
      <% @project.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

<CENTER>

   <div id = "project_name">
<div class="project_name">
    Project Name:
    <%= f.text_field :project_name,:maxlength => 30 %>
  </div>
</div>


   <div id ="smallbox">
<div id = "status">
  <div class="status"> 
    <%= f.label :status %> : 

    <%#= f.select :status, [['Active'],['Completed']], {:include_blank => true} %>
    <%= f.select :status, [['Active'],['Completed']] %>
  </div></div> 



<div class="client" STYLE="text-align: left;">
<%= label_tag :new_client, "Client" %><br/>
<%= text_field_tag :new_client, nil, :maxlength => 30 %>
Or
<%= f.select( :client, Project.all.map {|p| [p.client]}.uniq, :prompt => "Select previous..") %>
</div>


   <div class="business_div" STYLE="text-align: left;">
<%= label_tag :new_business_div, "Business Division" %><br/>
<%= text_field_tag :new_business_div, nil, :maxlength => 30 %>
Or
<%= f.select( :business_div, Project.all.map {|p| [p.business_div]}.uniq, :prompt => "Select previous") %>
</div>

   <div class="start_date" STYLE="text-align: left;">
    <b>Start Date:</b>
    <%= f.text_field :start_date, :class => 'datepicker', :style => 'width: 80px;' %>
  </div>  

</P>


<div class="create_button">
<div class="actions">
    <%= f.submit "Save New Project", :class => "button",  :confirm => "Are you sure you want to save the new project?" %>
  </div>
</div>

</div> <%#= small div %>


<% end %>



<div class="back_button2">
<%= button_to "Back", projects_path , :class => "button", :method => "get" %>
</div>

这是我的项目模型

class Project < ActiveRecord::Base
  attr_accessible  :fullname, :edited_first_name, :edited_last_name, :first_name, :last_name, :business_div, :client, :customer_benefits, :edited_date, :end_date, :entry_date, :financials, :industry, :keywords, :lessons_learned, :project_name, :role, :start_date, :status, :summary, :technol_ids, :tech , :technols



validates_presence_of :business_div, :client, :customer_benefits, :end_date, :financials, :industry, :lessons_learned, :project_name,  :role, :start_date, :status, :summary #, :keywords

validates_format_of :industry, :with => /\A[^\d]+\Z/, :message => "field should only have letters"
validates_format_of :business_div, :with => /\A[^\d]+\Z/, :message => "field should only have letters"
validates_format_of :client, :with => /\A[^\d]+\Z/, :message => "field should only have letters"
validates_format_of :exception_pm, :with => /\A[^\d]+\Z/, :message => "field should only have letters"
validates_format_of :project_owner, :with => /\A[^\d]+\Z/, :message => "field should only have letters"
validates_format_of :role, :with => /\A[^\d]+\Z/, :message => "field should only have letters"

has_many :projecttechnols
has_many :technols, :through => :projecttechnols

  def set_fullname(a, b)
    fullname = [a, b].join(' ')
  end


accepts_nested_attributes_for(:technols)

end

如果我需要包括其他任何内容,请告诉我。我已经被这个问题困扰了一段时间了。先感谢您。

4

1 回答 1

1

正如 railsdog 建议的那样,使用传递给Projects#create. 您的表单提交数据,并且该数据保存在称为params键/值对的变量中。该变量应该仍然可以从任何视图Projects#create呈现访问。

您需要做的是在表单元素上设置一些默认内容。text_field这是名为“project_name”的示例

<div class="project_name">
 Project Name:
  <%= f.text_field :project_name, params[:project_name],:maxlength => 30 %>
</div>

您应该能够对任何其他字段执行相同或类似的操作。

于 2012-10-16T18:25:17.540 回答