2014-10-16 2 views
0

Привет всем я пытаюсь вставить несколько записей в таблицу, используя ту же форму, до сих пор я достиг следующегоВставка несколько значений из одной формы Rails 4

class ProjectController < ApplicationController 
def new 
    @project = Project.new 
end 
def create 

    @projec = Project.new(project_params) 
    respond_to do |format| 
     if @project.save 
     format.html { flash[:notice] = 'User successfully created.' and redirect_to action: "index"} 

     format.json { render :show, status: :created, location: @project } 
     else 
     format.html { render :new } 
     format.json { render json: @project.errors, status: :unprocessable_entity } 
     end  
    end 
    end 
def project_params 
     params.require(:project).permit(:PROJECT_ID,:COMPANY_ID, :ASSESSMENT_ID, :PROJECT_SCORE , :CREATED_BY, :UPDATED_BY) 
    end 
end 

так на моем взгляде, я использовал как это, так как я хочу только оценка уровня проекта, который будет сохранен в базе данных со всеми другими значениями неизменных

<% 10.times do %> 
    <%= f.range_field :PROJECT_SCORE[], :min=>0, :max=>10, :class=>"slide", :id=>"slider1", name: 'PROJECT_SCORE[of_values][]'%> 
     <% end %> 

рядом в моей модели я использовал как этот

class Project< ActiveRecord::Base 
    serialize :PROJECT_SCORE ,Array 
end 

, но я получаю ошибку

Attribute was supposed to be a Array, but was a Fixnum. -- 0 

SO есть какие-либо альтернативные способы вставки несколько записей в таблице, в то же время? или как я могу решить эту проблему?

ответ

0

Существует альтернативный способ вставки нескольких записей, и я бы очень рекомендовал это сделать. Вы могли бы заставить это работать, но он чувствует себя немного взломанным и не очень гибким для меня. Попробуйте использовать связь has_many и вместо вложенных форм. Если вы не знакомы с ассоциациями has_many, есть вводный курс на codechool.com под названием Models Taste Like Chicken. Существует также отличный RailsCasts episode (#196), который подробно рассказывает о вложенных формах с некоторыми замечательными функциями AJAX.

Чтобы сделать это, вы могли бы создать модель под названием Score и сказать ему принадлежат проекты:

rails g model Score score:integer project:references

class Score < ActiveRecord::Base 
    belongs_to :project 
end 

И каждый проект будет иметь много баллов:

class Project < ActiveRecord::Base 
    has_many :scores, dependent: :destroy 
    accepts_nested_attributes_for :scores, allow_destroy: true 
end 

зависимый уничтожьте, чтобы ассоциированные баллы были удалены, если проект удален. Вам также нужно сказать, чтобы он принимал вложенные атрибуты для модели баллов. Подробности here.

Затем установить сильные параметры с things_attributes:[:thing1, :thing2, :etc]

class ProjectController < ApplicationController 

### other stuff 

def project_params 
    params.require(:project).permit(:PROJECT_ID, :etc, scores_attributes: [:id, :score]) 
end 

Одна вещь, которую я хотел бы упомянуть здесь является лучшей практикой для именования является использование snake_case для переменных и имен баз данных. Поэтому вместо :PROJECT_ID назовите его :project_id
ALL_CAPS обычно используется для констант.

Теперь вы можете использовать вспомогательный элемент формы fields_for, чтобы создать еще один блок формы в блоке формы.

<%= form_for @project do |f| %> 
    <div class="field"> 
    <!-- all normal form inputs --> 
    </div> 

    <!-- and now the nested form --> 
    <%= f.fields_for :scores do |ff| %> 
    <div class="field"> 
     <%= ff.range_field :score %> 
    </div> 
    <% end %> 

    <div class="form-actions"> 
    <%= f.button :submit %> 
    </div> 
<% end %> 

Это не позволит создать новые результаты еще, но это начинает становиться очень сложными и объясняется в Railscasts я уже упоминал выше (Тем не менее, он использует старую версию рельсов поэтому убедитесь, что и набор сильные параметры для вложенных атрибутов).

+0

спасибо, попробуем это –

Смежные вопросы