2010-09-24 3 views
1

Je travaille sur un peu d'extension pour Radiant CMS qui traite les données de levé. J'essaie d'utiliser form_for, fields_for et divers helpers que les rails fournissent à l'intérieur des tags de rayon prédéfinis. Ces balises généreraient l'enquête sur les pages Radiant.Radiant CMS: comment utiliser form_for, fields_for dans les tags de rayon

Voici ce que je pense pour l'intégration avec Radiant:

<r:survey id="200"> 
    <r:survey:form>     #<-- call to form_for 
    <r:survey:questions:each>  # <-- calls fields_for 
     <r:question>    # <-- renders question 
     <r:answer_field>   #<-- renders input via text_field, text_area, etc 
    </r:survey:questions:each> 
    </r:survey:form> 
</r:survey> 

Alors quand je l'appelle < r: enquête: forme >, il suppose que pour générer < tag forme >. Je peux le faire en fabriquant manuellement le code HTML, mais je voudrais utiliser form_for helper et autres.

Est-il possible que je pourrais obtenir les résultats suivants:

# ------ <r:survey:form> ----------------------------- 
    tag 'survey:form' do |tag| 
    # call form_for which would render form header and open <form> tag 
    tag.expand 
    # form_for would end here, closes </form> 
    end 

# ------ <r:survey:questions>---------------------------- 
    tag 'survey:questions' do |tag| 
    tag.expand 
    end 

# ------ <r:survey:questions:each>------------------------ 
    tag 'survey:questions:each' do |tag| 
    result = [] 
    survey = tag.locals.survey 
    # should call fields_for here 
    survey.survey_questions.sort_by{|q| q.order}.each do |question| 
     tag.locals.question = question 
     result << tag.expand 
    end 
    # end of fields_for 
    result 
    end 

J'espère que cela explique ce que je suis en train d'accomplir.

+0

Une chance avec cette question? – Trip

+0

Le meilleur que je pourrais trouver est d'appeler le modèle de rendu dans le bloc de balise comme ceci: 'response.template.render: partial => 'partial_name',: local => {: var => val,: tag => tag} ' puis dans le partiel pour appeler' tag.expand' pour développer les balises internes. Pas élégant, mais ça marche. – Swartz

Répondre

2

Vous devriez pouvoir inclure simplement les modules Helper et utiliser les aides directement dans la définition de balise pour quelque chose comme ceci.

module CustomTags 
    include Radiant::Taggable 
    include ActionView::Helpers::TagHelper 
    include ActionView::Helpers::AssetTagHelper 

    tag "my_tag" do |tag| 
    javascript_include_tag :some_js_file 
    end 
end 
Questions connexes