Cześć,
Mołgby mi ktoś pomóc z dodaniem autora do news’a?
Rok temu o tym pisałem lecz teraz railsy się zmieniły i trochę jeszcze tego nie ogarniam…
Pozdr.
Cześć,
Mołgby mi ktoś pomóc z dodaniem autora do news’a?
Rok temu o tym pisałem lecz teraz railsy się zmieniły i trochę jeszcze tego nie ogarniam…
Pozdr.
Generujesz migrację z dodaniem pola do bazy, aktualizujesz widoki i gotowe. Chyba nie oczekujesz, że ktoś poprowadzi Cię za rączkę z takim zadaniem?
Wyobraź sobie, że takie rzeczy już mam : )
I może nie dopisałem… Ale ja chcę aby autorem tekstu był zalogowany użytkownik…
i jak już będziesz mał użytkowników, to robisz coś takiego:
current_user.posts.create params[:post]
Użytkowników mam dzięki devise.
undefined method `news' for #<User:0x2c08b84>
Taki dostaje komunikat po dodaniu:
current_user.posts.create params[:post]
powyższy kod dodaje do:
def create
@news = current_user.news.create params[:news]
...
end
a asocjację pomiędzy modelami News i User masz?
Pewnie ; )
User has_many :news
News belongs_to :user
EDIT:
Teraz zaczęło działać… News się dodaje lecz nadal nie przypisuje się użytkownik…
To może pokaż kod z kontrolera? :]
[code]news controller
class NewsController < ApplicationController
layout “news”
uses_tiny_mce :only => [:new, :edit]
def index
@title = “Newsy”
@news = News.all
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @news }
end
end
def show
@recent_comment = Comment.limit(3)
@news = News.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @news }
end
end
def new
if current_user.try(:admin?)
@news = News.new(params[:news])
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @news }
end
else
flash[:notice] = 'Nie masz uprawnień do stworzenia tego postu !'
redirect_to root_url
end
end
def edit
if current_user.try(:admin?)
@news = News.find(params[:id])
else
flash[:notice] = ‘Nie masz uprawnień do edytowania tego postu !’
redirect_to root_url
end
end
def create
@news = current_user.news.create(params[:news])
respond_to do |format|
if @news.save
format.html { redirect_to(@news, :notice => 'News was successfully created.') }
format.xml { render :xml => @news, :status => :created, :location => @news }
else
format.html { render :action => "new" }
format.xml { render :xml => @news.errors, :status => :unprocessable_entity }
end
end
end
def update
@news = News.find(params[:id])
respond_to do |format|
if @news.update_attributes(params[:news])
format.html { redirect_to(@news, :notice => 'News was successfully updated.') }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @news.errors, :status => :unprocessable_entity }
end
end
end
def destroy
if current_user.try(:admin?)
@news = News.find(params[:id])
@news.destroy
respond_to do |format|
format.html { redirect_to(news_index_url) }
format.xml { head :ok }
end
else
flash[:notice] = 'Nie masz uprawnień do usunięcia tego postu !'
redirect_to root_url
end
end
end[/code]
Taki jest kontroler newsów : )
[quote=maciek441][code]news controller
def create
@news = current_user.news.create(params[:news])
(…)[/code]
[/quote]
spróbuj build (http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html)
@news = current_user.news.build(params[:news])
Niestety, nadal nic… : (
rails console
User.first.news.build(...)
n = News.new
n.user = User.first
itp.
To najprostszy sposób na wybadanie gdzie leży problem.
ad. 2 Nie mam pomysłu na jaką zmienić : D Pierwsze co mi na myśl wpadło to właśnie news
BTW. jak zmienić nazwę modelu?
Przepraszam dopiero się uczę : )
a, rzeczywiście, niepoliczalna nazwa może być problemem. Zmieniasz nazwę klasy i pliku, dodajesz migrację które zmodyfikują bazę, z kluczami obcymi włącznie. Niestety nie ma do tego żadnego generatora. Nazwa – może “Post”? “NewsItem”, “Article”, “NewsArticle” – wybierz sobie, jest dużo opcji.
Nazwa modelu “News” zawsze prowadzi do problemów, prędzej czy później. Nawet jeśli za tym razem sobie z tym poradzisz, i tak natrafisz na coś później i będziesz siedział cztery noce powtarzając sobie “Co ja **** zrobiłem?!”. Mówię to z doświadczenia
Wkurzyłem się i wygenerowałem nowego scaffold’a o nazwie: Post
a teraz gdy dodaje do posts_controller.rb
@post = current_user.posts.build(params[:posts])
To wywala mi:
undefined method `posts' for #<User:0x2756e24>
Więc uważam, że jestem coraz bliżej : P
dodaj do user.rb has_many :posts
i do post.rb belongs_to :user
I jedna rada: przeczytaj uważnie od początku do końca te podstawowe poradniki (http://guides.rubyonrails.org/) Bez tego ani rusz.
[quote=sebcioz]dodaj do user.rb has_many :posts
i do post.rb belongs_to :user
I jedna rada: przeczytaj uważnie od początku do końca te podstawowe poradniki (http://guides.rubyonrails.org/) Bez tego ani rusz.[/quote]
Przepraszam, właśnie przed chwilą sam się zajechałem, bo zapomniałem o asocjacji : P
Teraz gdy już działa to i tak nie nadaje autora tekstu : )
EDIT:
Przepraszam już mi działa… : )
Dziękuję wszystkim za pomoc i bardzo przepraszam, że aż tak noobie : )
Jeszcze raz dziękuję !
[quote=sebcioz]1. Otwórz konsolę rails console
i sprawdź czy działa ręczne tworzenie newsa:
User.first.news.build(...)
n = News.new
n.user = User.first
itp.
To najprostszy sposób na wybadanie gdzie leży problem.[/quote]