2016-08-23 3 views
0

Ich arbeite an einem Formular, wo Benutzer Land auswählen und dort Auswahl angezeigt werden kann und show.html.erb.Rails: Speichern country_select to database

Ich habe hinzugefügt country_select in meiner Form wie dieses

<div class="col-md-4"> 
    <div class="form-group"> 
    <%= f.country_select :country %> 
</div> 

Mein Modell article.rb wie folgt aussieht:

class Article < ActiveRecord::Base 
    belongs_to :author 
    has_many :article_article_categories 
    has_many :categories, through: :article_article_categories 

    validates :title, presence: true, length: { minimum: 3, maximum: 50 } 
    validates :description, presence: true, length: { minimum: 10, maximum: 500 } 
    validates :author_id, presence: true 

    attr_accessor :country 
end 

Die ausgewählten Werke und der Benutzer kann das Land auswählen. . Perfekt!

Aber es wird nicht in meiner Sicht/show.html.erb up .. Ich habe wie folgt versucht:

<%= @article.country %> 

So dafür ich eine Migration generiert:

class AddCountryToArticles < ActiveRecord::Migration[5.0] 
    def change 
    add_column :article, :country, :string 
    end 
end 

Und hat die Migration ausgeführt.

In meinem Controller habe ich das meinem params:

def article_params 
    params.require(:article).permit(:country, :title, :description, article_article_categories_ids: []) 
end 

Aber ich nichts bekommen .. Bei country_select Dokumentation unter Nutzung: "Einfache Anwendung liefert Modell und Attribut als Parameter: country_select (" user "," country ")"

Aber ich weiß nicht wirklich, wo ich diese Codezeile setzen soll. Ich habe versucht, es in meine create, show und params zu bringen. Und mit ("Artikel", "Land")

Kann mir jemand helfen, einen Schritt näher zu kommen? Ich denke auch installiert .. Vielleicht könnte das etwas Ärger verursachen? Ich bin mit Schienen 5.0.0

+0

warum definieren Sie 'country' als 'attr_accessor'? Was Sie sagen, zeigt an, dass' country' nicht richtig gespeichert wird. Das Überprüfen des Rails-Logs, um zu sehen, ob der Parameter durch den Controller geleitet wird, ist hilfreich. – kasperite

+0

Hält es das Land wirklich? check in deine Rails Konsole ('rails console') mit:' Article.pluck (: country) ' –

Antwort

1

Zuerst bekommen arbeite loswerden attr_accessor :country als attr_accessor verwendet wird, ein Attribut für das Objekt von Modell zu definieren, die nicht mit einem beliebigen Spalte in der Datenbank abgebildet wird.

Um Ihre Frage zu beantworten „Aber ich weiß wirklich nicht, wo diese Zeile Code zu setzen .. Ich habe versucht, es in meinem schaffen zu setzen, zeigen, und params ..

Sie müssen diese Codezeile in Ihre Formularansicht einfügen. Das erste Attribut ist der Name des Modells (Artikel in Ihrem Fall) und das zweite ist der Name Ihres Attributs (Land in Ihrem Fall). Sie haben bereits das richtig gemacht wird jedoch mit:

<%= f.country_select :country %>

Sie müssen sicherstellen, dass diese Form tatsächlich für eine Article ist so sollte es sein:

<%= form_for @article do |f| %> 
    <div> 
    <%= f.country_select :country %> 
    </div> 
<% end %> 
+0

Haha .. Jesus. Ja, du hast absolut recht.Befreien Sie sich von attr_accessor. Ich tat es, weil meine Auswahl nicht funktionierte, wenn ich nicht tat. Also habe ich das Modell bei Github überprüft. Alles funktioniert jetzt. Ich habe keine Ahnung, warum es nicht an erster Stelle war. Vielen Dank! – user2254488

Verwandte Themen