Witam,
Mam problem. Nie wiem jak mam nadać właściciela artykułu…
Ktoś może pomóc?
Sorry mam 16 lat i sie zaczynam bawić z Railsem
Witam,
Mam problem. Nie wiem jak mam nadać właściciela artykułu…
Ktoś może pomóc?
Sorry mam 16 lat i sie zaczynam bawić z Railsem
Hej, podaj źródło z którego się uczysz.
http://media.rubyonrails.org/video/rails_blog_2.mov
To jest jak zrobić bloga więc podpatrzyłem troche. Chodzi o to że w tym screencascie jest dodawanie komentarza do wpisu. Może coś źle zrobiłem ?
To bardzo prosta aplikacja posiadająca logowanie przez http_basic.
By zapisywać autora proponuję dodać pole za pomocą migracji np:
add_column :posts, :author, :string
Możesz następnie albo zpamiętywać login z metody authenticate albo po prostu umożliwić piszącemu wpisanie tam swojego nicka.
By to osiągnąć dodajesz do widoku z formularzem dodatkowe pole typu text_field o nazwie author.
Chciałbym jednak uniknąć możliwości wpisywania ręcznie autora.
Mógłbyś mi podać jak zrobić to za pomocą metody authenticate?
hmm to zależy jak masz sprawdzane authenticate bo tam w screencascie jest user == “admin”
trzeba by tą zmienną lokalną user zapamietac do zmiennej instancji np @current_user
potem przy dodawaniu postu zrobić np :
(params[:post] || {}).merge(:author => @current_user)
przy czym nadal musiałbyś mieć pole author w bazie tak jak pisałem wyżej.
Aha przykłady pisałem z pamięci więc błędy mogą być.
[quote=maciek441]Chciałbym jednak uniknąć możliwości wpisywania ręcznie autora.
Mógłbyś mi podać jak zrobić to za pomocą metody authenticate? :)[/quote]
Mniej więcej coś takiego (dopasuj sobie do własnego kodu):
# w kontrolerze bazowym dla panelu administracyjnego
before_filter :authenticate
protected
def authenticate
authenticate_or_request_with_http_basic do |username, password|
@current_user = User.authenticate(username, password)
end
end
# w articles_controller / create
@article = Article.create(params[:article].merge({user: @curent_user}))
Było by good gdyby nie to :
ActiveRecord::AssociationTypeMismatch in FilmsController#create
User(#18841390) expected, got HashWithIndifferentAccess(#2662390)
Jutro jeszcze posprawdzam.
Dzięki !
Mam authlogic ale gdy mam w articles_controller
@article.user = current_user
to do bazy nie chce wprowadzić ani ID użytkownika ani username.
Spróbuje kodu hubertlepicki
EDIT:
Dotychczasowo tak miałem. To mój controller:
[quote]Articleclass ArticlesController < ApplicationController
layout “application”
filter_resource_access
def index
@title = “Kategorie Articleowe”
@Articles = Article.find(:all)
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @Articles }
end
end
def show
@title = “#{@Article.title}”
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @Article }
end
end
def new
@title = “Dodaj nowy Article”
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @Article }
end
end
def edit
@title = “Edytacja Articleu #{@Article.title}”
end
def create
@title = “#{@Article.title}”
@Article.user = current_user
respond_to do |format|
if @Article.save
flash[:notice] = 'Article pt. #{@Article.title} został prawidłowo dodany !'
format.html { redirect_to(@Article) }
format.xml { render :xml => @Article, :status => :created, :location => @Article }
else
format.html { render :action => "new" }
format.xml { render :xml => @Article.errors, :status => :unprocessable_entity }
end
end
end
def update
@title = “Aktualizowanie Articleu”
respond_to do |format|
if @Article.update_attributes(params[:Article])
flash[:notice] = 'Article został prawidłowo zaaktualizowany !'
format.html { redirect_to(@Article) }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @Article.errors, :status => :unprocessable_entity }
end
end
end
def destroy
@title = “Usuwanie Articleu”
@Article.destroy
respond_to do |format|
format.html { redirect_to(Articles_url) }
format.xml { head :ok }
end
end
end[/quote]