with render_to_string rails from ruby-on-rails ruby model-view-controller partials actioncontroller

ruby on rails - render_to_string - ActionController:: UrlGenerationError en valoraciones#nuevo



render json rails (1)

He leído otros artículos de SO relacionados con UrlGenerationError que parecen apuntar a la singularización o la plurización de una palabra, pero no creo que ese sea el problema aquí.

Funciona cuando elimino de valoraciones / _form.html.erb:

<%= render "comments/comments" %> <%= render "comments/form" %>

Envíe la _form con :name & :tag_list , readd

<%= render "comments/comments" %> <%= render "comments/form" %>

y luego actualizar ¿Cuál es el trato cuando es nulo?

rutas

resources :valuations do resources :comments end

comments_controller

class CommentsController < ApplicationController before_action :load_commentable before_action :set_comment, only: [:show, :edit, :update, :destroy] before_action :logged_in_user, only: [:create, :destroy] def index @comments = @commentable.comments end def new @comment = @commentable.comments.new end def create @comment = @commentable.comments.new(comment_params) if @comment.save @comment.create_activity :create, owner: current_user redirect_to @commentable, notice: "comment created." else render :new end end def edit @comment = current_user.comments.find(params[:id]) end def update @comment = current_user.comments.find(params[:id]) if @comment.update_attributes(comment_params) redirect_to @commentable, notice: "Comment was updated." else render :edit end end def destroy @comment = current_user.comments.find(params[:id]) @comment.destroy @comment.create_activity :destroy, owner: current_user redirect_to @commentable, notice: "comment destroyed." end private def set_comment @comment = Comment.find(params[:id]) end def load_commentable resource, id = request.path.split(''/'')[1, 2] @commentable = resource.singularize.classify.constantize.find(id) end def comment_params params.require(:comment).permit(:content, :commentable) end end

valuations_controller

class ValuationsController < ApplicationController before_action :set_valuation, only: [:show, :edit, :update, :destroy] before_action :logged_in_user, only: [:create, :destroy] def index if params[:tag] @valuations = Valuation.tagged_with(params[:tag]) else @valuations = Valuation.order(''RANDOM()'') end end def show @valuation = Valuation.find(params[:id]) @commentable = @valuation @comments = @commentable.comments @comment = Comment.new end def new @valuation = current_user.valuations.build @commentable = @valuation @comments = @commentable.comments @comment = Comment.new end def edit end def create @valuation = current_user.valuations.build(valuation_params) if @valuation.save redirect_to @valuation, notice: ''Value was successfully created'' else @feed_items = [] render ''pages/home'' end end def update if @valuation.update(valuation_params) redirect_to @valuation, notice: ''Value was successfully updated'' else render action: ''edit'' end end def destroy @valuation.destroy redirect_to valuations_url end private def set_valuation @valuation = Valuation.find(params[:id]) end def correct_user @valuation = current_user.valuations.find_by(id: params[:id]) redirect_to valuations_path, notice: "Not authorized to edit this valuation" if @valuation.nil? end def valuation_params params.require(:valuation).permit(:name, :private_submit, :tag_list, :content, :commentable, :comment) end end

comentarios / _form.html.erb

<%= form_for [@commentable, @comment] do |f| %> <% if @comment.errors.any? %> <div class="error_messages"> <h2>Please correct the following errors.</h2> <ul> <% @comment.errors.full_messages.each do |msg| %> <li><%= msg %></li> <% end %> </ul> </div> <% end %> <div class="america"> <div class="form-group"> <%= f.text_area :content, rows: 4, class: ''form-control'', placeholder: ''Enter Comment'' %> </div> <div class="america2"> <%= button_tag(type: ''submit'', class: "btn") do %> <span class="glyphicon glyphicon-plus"></span> Comment <% end %> </div> <% end %>

Muchísimas gracias por su tiempo.


Cuando tiene un recurso anidado así, la url para crear un comentario se parece a /valuations/123/comments donde 123 es el id. De la valoración: sin una identificación de valuación, esta URL no se puede generar.

En su página de valoraciones # nueva, la valoración (es decir, @commentable ) es un objeto no guardado, por lo que aún no tiene una identificación, de ahí el error acerca de un valuation_id faltante. Además, tener un formulario anidado dentro de otro es html no válido y dará lugar a un comportamiento extraño. En su página de programa, por otro lado, la valoración tiene una identificación y, por lo tanto, las cosas deberían funcionar como están.

Si desea crear una valoración y su (s) comentario (s) inicial (es) de una vez, debe usar accepts_nested_attributes_for y fields_for para agregar los campos de los comentarios a su formulario de valoración (hay otras formas, pero accepts_nested_attributes_for es lo que está integrado en los rieles)