Que tal!
Estoy empezando a desarrollar con Rails...por lo que me compre un libro
llamado Simply Rails. Siguiendo los pasos del libro me encontre con un
error que no me cabe porque puede estar pasando:
undefined method `name' for nil:NilClass
Les dejo el controlador:
#Controlador empieza aqui#
class StoriesController < ApplicationController
before_filter :login_required, :only => [ :new, :create]
def index
get_stories 'votes_count >= 5'
end
def bin
get_stories ''
render :action => 'index'
end
protected
def get_stories(conditions)
@stories = Story.find :all, :order => 'id DESC', :conditions =>
conditions
end
def new
@story = Story.new
end
def create
#@story = Story.new(params[:story])
@story = @current_user.stories.build params[:story]
if @story.save
flash[:notice] = "La historia a sido agregada correctamente!"
redirect_to stories_path
else
render :action => 'new'
end
end
def show
@story = Story.find_by_id(params[:id])
end
end
#Controlador termina aqui#
#Vista empieza aqui#
<h2><%= @story.name %></h2><!--aqui es donde se produce el error-->
<h3>
<span id="vote_score">
Shoveadas => <%= @story.votes.size %>
</span>
</h3>
<p class="submited_by"> Agregada por: <%= @story.user.login %> </p>
<p><%= link_to @story.link, @story.link%></p>
<div id="vote_form">
<% form_remote_tag :url => story_votes_path(@story) do %>
<%= submit_tag 'Shovealo!' %>
<% end %>
</div>
<ul id="vote_history">
<% if @story.votes.empty? %>
<em>Sin shoveadas aun</em>
<% else %>
<%= render :partial => 'votes/vote', :collection => @story.votes %>
<% end %>
</ul>
#Vista termina aqui#
La clase Story:
#Clase Story empieza aqui#
class Story < ActiveRecord::Base
belongs_to :user
validates_presence_of :name, :link
has_many :votes
def to_param
"#{id}-#{name.gsub(/\W/, '-').downcase}"
end
has_many :votes do
def lastest
find :all, :order => 'id DESC'
end
end
end
#Clase Story termina aqui#
La migracion:
#Migracion empieza aqui#
class CreateStories < ActiveRecord::Migration
def self.up
create_table :stories do |t|
t.string :name
t.string :link
t.timestamps
end
end
def self.down
drop_table :stories
end
end
#Migracion termina aqui#
De antemano gracias!
on 2010-06-18 00:42
on 2010-06-22 08:23
Hola que tal, primero lo primero, muestra el mensaje de error, no nos has dicho que accion estas ejecutando y que linea te da el error. Pdta: No comiences con simply, es un libro que te deja muchas lagunas, debes empezar por railstutorial.org es el mejor para comenzar, creeme yo me lei simply rails 2, Agile Web Development y railstutoria, y te digo por experiencia que este ultimo es el mejor para comenzar, ya despues te metes con Agile Web ...
on 2010-06-22 17:37
Omar, En cuanto al error, no vamos a poder ayudar porque no sabemos ni que método se está ejecutando, ni que vista es la que se está renderizando. De todas maneras, intentando responder a tu pregunta de por que que se está ejecuntado un método en lugar de una propiedad, si por propiedad te referÃs a un atributo, entonces recordá que Ruby no permite el acceso de manera directa a los atributos (principio de encapsulamiento), siempre cuando "accedes" a un atributo, en realidad accedés a un método con el mismo nombre que el atributo. Saludos.
on 2010-06-25 08:08
no entiendo mucho la idea del to_param...por lo que parece es para generar direcciones prolijas (www.articulo.com/1miszapatos en vez de solo www.articulo.com/1)...esto mas que una tecnica creo que es un hack...un truco...revisa que en el libro el codigo dentro de "to_param" este bien...ademas revisa despues de (params[:id]) creo que para que el hack funcionara deberia ser (params[:id].to_i) asi rails en vez de interpretar 1miszapatos lo convierte a entero y obtiene un 1... revisa que en el modelo no tengas algo como before_create :to_param la verdad no creo, porque por lo que entiendo estas sobreescribiendo el metodo param todo lo demas luce normal, el error debe estar en algo de eso la verdad a mi no me convence hacer esto, ademas si estas comenzando es medio confuso...como te dije es mas un hack que una tecnica y hay plugins que te hacen esto de mejor manera y con mejores resultados (quedandote /mis_zapatos en vez de 1mis_zapatos...que es l ideal) revisa eso porque estoy casi seguro que el error esta por ahi...suerte :D
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.