2017-02-23 2 views
1

Schienen Neuling. Sei sanft. Wenn ich mehr Zeug zeigen muss, werde ich es tun.Verbinden mehrerer Erträge in Schienen

Der Versuch, einen Newsletter-Anmeldung Block über meine Fußzeile auf einem Projekt einzufügen, aber es in den Layouts einrichten eine teilweise nicht machen.

Ich habe den Ertrag einen Index aus einem Blog ausgibt.

Im Moment ist es einfach nur sagen, „false“ auf meinem lokalen Rechner.

Ist es möglich, mehrere Renditen für verschiedene Indizes zu haben?

Ist es möglich, eine andere Seite in eine Layoutseite einzufügen?

application.html.erb

<div id="blog"> 
    <%= yield %> 
</div> 
<div> 
<%= content_for?(:newsletter) ? yield(:newsletter) : yield %> 
</div> 
<div> 
<%= render 'layouts/footer' %> 
</div> 

newsletter.html.erb

<% content_for :newsletter do %> 
<h1>Get My Awesome News Letter</h1> 
<p>Give me your email and keep up to date on my cat's thoughts.</p> 
<%= form_tag('/emailapi/subscribe', method: "post", id: "subscribe", remote: "true") do -%> 
    <%= email_field(:email, :address, {id: "email", placeholder: "email address"}) %> 
    <%= submit_tag("Sign me up!") %> 
<% end %> 

emailapi_controller.rb

class EmailapiController < ApplicationController 
def newsletter 
    render params[:newsletter] 
end 

def subscribe 
    gb = Gibbon::Request.new 

    gb.lists.subscribe({ 
     :id => ENV["MAILCHIMP_LIST_ID"], 
     :email => {:email => params[:email][:address]} 
     }) 
end 
end 

routes.rb

root to: 'posts#index' 

get "/:newsletter" => 'emailapi#newsletter' 
post 'emailapi/subscribe' => 'emailapi#subscribe' 
+0

Sie sollten nicht diese bedingten Test benötigen: 'content_for (:Newsletter) ? yield (: newsletter): yield: probiere nur: '<% = content_for: newsletter%>' was im Prinzip das obige für dich tut :) (beachte die '<% =' wichtig) http://apidock.com/rails/ v4.2.1/ActionView/Helfer/CaptureHelper/content_for –

Antwort

1

Sie sollten diese bedingten Test nicht brauchen:

content_for?(:newsletter) ? yield(:newsletter) : yield 

versuchen gerade:

<%= content_for :newsletter %> 

Hier ist der Doc auf content_for:

http://apidock.com/rails/v4.2.1/ActionView/Helpers/CaptureHelper/content_for

Ie zeigen nur die Newsletter wenn Newsletter vorhanden ist. Der zusätzliche Ertrag (wenn der Newsletter-Inhalt nicht vorhanden ist) wird aus dem obigen Blog-Abschnitt wiederholt. Sie sollten wahrscheinlich haben keine doppelten Ebene yield s nur das eine ... alles andere einen Namen (zB :newsletter)

Auch haben sollte - Sie scheinen eine <% end %> in newsletter.html.erb

+0

Hat nicht geholfen. Machte die empfohlenen Anpassungen für den anderen Ertrag, aber am Ende habe ich nur den _footer. – andywalt

1

zu fehlen Sie sollten nur einen anderen Renderblock verwenden können. Ich bin mir nicht sicher, wo Ihr newsletter.html.erb Leben, aber wenn zum Beispiel in einem Ordner gelebt wie includes/ Sie so etwas wie tun könnte:

<%= render 'includes/newsletter' %>

Verwandte Themen