Artykuły i dodawanie właściciela :)

Witam,
Mam problem. Nie wiem jak mam nadać właściciela artykułu… :frowning:
Ktoś może pomóc?

Sorry mam 16 lat i sie zaczynam bawić z Railsem :slight_smile:

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 ? :slight_smile:

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? :slight_smile:

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 :slight_smile: 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)

:slight_smile: Jutro jeszcze posprawdzam.
Dzięki ! :slight_smile:

Nie lepiej od razu zaimplementować Authlogic? http://railscasts.com/episodes/160-authlogic

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 :slight_smile:

EDIT:
Dotychczasowo tak miałem. To mój controller:

[quote]Articleclass ArticlesController < ApplicationController
layout “application”
filter_resource_access

GET /Articles

GET /Articles.xml

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

GET /Articles/1

GET /Articles/1.xml

def show
@title = “#{@Article.title}”

respond_to do |format|
  format.html # show.html.erb
  format.xml  { render :xml => @Article }
end

end

GET /Articles/new

GET /Articles/new.xml

def new
@title = “Dodaj nowy Article”

respond_to do |format|
  format.html # new.html.erb
  format.xml  { render :xml => @Article }
end

end

GET /Articles/1/edit

def edit
@title = “Edytacja Articleu #{@Article.title}”
end

POST /Articles

POST /Articles.xml

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

PUT /Articles/1

PUT /Articles/1.xml

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

DELETE /Articles/1

DELETE /Articles/1.xml

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]