#ruby-on-rails #ruby #ruby-on-rails-4
#ruby-on-rails #ruby #ruby-on-rails-4
Вопрос:
У меня странная проблема с «вложенной формой» в Rails. Я создал модель «evaluate», связанную с другой моделью «proyect», но когда я пытаюсь показать поля в форме «proyects», просто покажите поля из «proyects».
Вот мой код:
Модели:
proyect.erb
class Proyect < ActiveRecord::Base
belongs_to :user
has_many :vercions #I know is versions
has_many :evaluates #I know is evaluators
accepts_nested_attributes_for :evaluates, allow_destroy: true
validates :titulo,:presence => true,
:length => { :minimum => 3 }
validates :descripcion,:presence => true,
:length => { :minimum => 3 }
end
оценить.erb
class Evaluate < ActiveRecord::Base
belongs_to :proyect
has_and_belongs_to_many :users
end
Контроллер
proyects_controller.erb
class ProyectsController < ApplicationController
before_action :set_proyect, only: [:show, :edit, :update, :destroy]
# GET /proyects
# GET /proyects.json
def index
if current_user.tipo == 'i'
@proyects = Proyect.where(:user_id => current_user.id)
else
@proyects = #Proyect.where(:id_user => current_user.id)
Proyect.all
end
end
# GET /proyects/1
# GET /proyects/1.json
def show
@vercion = Vercion.new
end
# GET /proyects/new
def new
@proyect = Proyect.new
@proyect.evaluates.build
end
# GET /proyects/1/edit
def edit
end
# POST /proyects
# POST /proyects.json
def create
@proyect = current_user.proyects.new(proyect_params)
respond_to do |format|
if @proyect.save
format.html { redirect_to @proyect, notice: 'Proyecto creado!.' }
format.json { render :show, status: :created, location: @proyect }
else
format.html { render :new }
format.json { render json: @proyect.errors, status: :unprocessable_entity }
end
# Llamamos al ActionMailer que creamos
Usermailer.bienvenido_email(current_user,@proyect).deliver
end
end
# PATCH/PUT /proyects/1
# PATCH/PUT /proyects/1.json
def update
respond_to do |format|
if @proyect.update(proyect_params)
format.html { redirect_to @proyect, notice: 'Proyect was successfully updated.' }
format.json { render :show, status: :ok, location: @proyect }
else
format.html { render :edit }
format.json { render json: @proyect.errors, status: :unprocessable_entity }
end
end
end
# DELETE /proyects/1
# DELETE /proyects/1.json
def destroy
@proyect.destroy
respond_to do |format|
format.html { redirect_to proyects_url, notice: 'Proyect was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_proyect
@proyect = Proyect.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def proyect_params
params.require(:proyect).permit(
:titulo, :descripcion,:evaluador, :id_user, :codigo, :user_assign,evaluates_attributes: [:id,:nombre, :prioridad, :_destroy, user_ids: [] ])
end
end
Views_form
.html.erb (проекты)
<%= nested_form_for(@proyect) do |f| %>
<% if @proyect.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@proyect.errors.count, "error") %> prohibited this proyect from being saved:</h2>
<ul>
<% @proyect.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :titulo %><br>
<%= f.text_field :titulo %>
</div>
<div class="field">
<%= f.label :descripcion %><br>
<%= f.text_area :descripcion %>
</div>
<div class="field">
<%= f.hidden_field :id_user, :value => current_user.id %>
</div>
<!--Aqui añadi algo-->
<fieldset id="evaluates">
<%= f.fields_for :evaluates do |evaluates_form| %>
<div class="field">
<%= evaluates_form.label :status %><br>
<%= evaluates_form.text_field :status %>
</div>
<%= evaluates_form.link_to_remove "Eliminar esta tarea" %>
<% end %>
<p><%= f.link_to_add "Agregar una tarea", :evaluates %></p>
</fieldset>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
_evaluate_fields.html.erb
<div class="field">
<%= f.label :status, 'Nombre de la tarea' %><br>
<%= f.text_field :status %>
</div>
<div class="field">
<%= f.collection_check_boxes :user_ids, User.where(:tipo => 'e'), :id, :cedula %>
</div>
<%= f.link_to_remove "Eliminar Evaluador" %>
Комментарии:
1. Я не вижу
:status
разрешенного атрибута evaluateproject_params
. Может ли это быть причиной?2. Нет, мой друг. На самом деле у меня есть такая строка, как: def proyect_params params.require(:proyect).permit( :titulo, :descripcion,:evaluador, :id_user, :codigo, :user_assign,evaluates_attributes: [:id, :status, :_destroy, user_ids: [] ]) конец
3. итак, ваш фактический код отличается от того, что вы опубликовали? пожалуйста, обновите свой вопрос последним кодом