레일 뷰에서 데이터를 제출하고 표시하는 데 구조적인 문제가 있습니다. 내 프로젝트 작성보기의 경우 사용자는 프로젝트에 기술 요구 사항을 추가 할 수 있습니다. 그러나 프로젝트는 메모리에만 존재하므로 스킬 컨트롤러의 생성 동작에서 스킬을 할당하면 오류가 발생합니다. 게다가, create 액션이 새로운 것을 프로젝트로 리디렉션하면 메모리가 손실됩니다. 따라서 메모리 프로젝트 오브젝트와 스킬 오브젝트를 연관시킬 수 있다면 도움이 될지 모르겠다.메모리 객체가 레일스에서 연관성을 가질 수 있습니까? 비 전통적인 형식보기
메모리에서 밖에 나가는 프로젝트에 기술을 할당하는 방법을 보여줄 수 있습니까? 또는 기술 모음을 만들고 사용자가 기술 추가를 클릭 할 때 해당 모음을 표시 한 다음 사용자가 프로젝트를 만들기 위해 "만들기"를 클릭하면 프로젝트 작성 작업의 프로젝트에 이러한 기술 수집을 할당 할 수 있습니까?
모델 :
class Project < ActiveRecord::Base
has_many :requirements
has_many :skills, through: :requirements
end
class Skill < ActiveRecord::Base
has_many :requirements
has_many :projects, through: :requirements
end
class Requirement < ActiveRecord::Base
belongs_to :project
belongs_to :skill
end
컨트롤러 :
class SkillsController < ApplicationController
def create
if params[:project] && Skill.where(name: params[:skill][:name]) != []
skill = Skill.where(name: params[:skill][:name]).first
@project_skills = []
@project_skills << skill
else
skill = Skill.create(name: params[:skill][:name]) if params[:skill][:name]
@project_skills = []
@project_skills << skill
end
end
class OrganizationAdmin::ProjectsController < OrganizationAdminController
before_action :find_organization, only: [:create]
def new
@project = Project.new(organization_id: params[:organization_id])
@skill = Skill.new
@all_skills = Skill.all
@project_skills
end
def create
@project = Project.new(project_params)
if @project.save
@project.update_columns(state: "open", causes: @organization.cause)
creates_a_newsfeed_item_for_the_project(@project)
flash[:notice] = "You successfully created a project"
redirect_to project_path(@project.id)
else
render :new
end
end
조회수
%section#form.register
.row.row-custom
.col-lg-10.col-project-form
= form_for [:organization_admin, @project], html: {class: 'form-horizontal'} do |f|
%h1 Create a Project
%fieldset
.row
.col-lg-5
.form-group#deadline
%label.control-label.col-lg-3 Deadline
.col-lg-9.project-gen-input-fix
= f.date_select(:deadline, :order => [:month, :day, :year])
.col-lg-3
.form-group#hours
%label.control-label.col-lg-8{:for => "estimated-hours"} Estimated Hours
.col-lg-4
= f.text_field :estimated_hours, class: "form-control input-sm"
.form-group
%label.control-label.col-lg-2 Project Title
.col-lg-10
= f.text_field :title, class: "form-control"
= hidden_field_tag :skills, @project_skills
.form-group
%label.control-label.col-lg-2 Description
.col-lg-10
= f.text_area :description, cols: 6, rows: 6, class: "form-control"
= f.hidden_field :organization_id
.form-group
= f.submit "Create", class: "btn btn-lg btn-primary pull-right"
= form_for @skill, url: skills_path do |f|
%div.edit-input-wrapper
= f.label :skill_requirements
= f.text_field :name, data: {autocomplete_source: skill_set(@all_skills)}
= hidden_field_tag :project, @project
= f.submit "Add Skill", class: "btn btn-success", id: "edit-submit"
%ul
- @project_skills.each do |type|
%li= type.name
.col-lg-2
%p#form-tip <strong>Tip</strong>: The dreams of yesterday are the hopes of today and <a href="#">the reality of tomorrow</a>.
스킬을 할당하기 전에'@ project'를 저장하십시오. – meagar
그건 아주 좋은 생각입니다. 그러나 Draft라는 새로운 객체를 만들어야한다고 생각합니다. RESTful이 되려면 프로젝트 컨트롤러에서 create 액션을 눌렀을 때만 프로젝트를 생성 할 수있다. – robertjewell