Динамические пути в помощнике

class HandleMyNotes extends Component {
  state = {
    isLoading: false,
    err: null,
    posts: [],
  };

  componentDidMount() {
    const db = firebase.firestore();

    this.setState({
     isLoading: true,
    });

    db.collection("posts")
      .where("author.email", "==", this.props.authorEmail)
      .get()
      .then(querySnapshot => {
        this.setState({
         isLoading: false,
         posts: querySnapshot.map(note => note.data()),
        });
      })
      .catch(err => {
        this.setState({
         isLoading: false,
         err,
        });
      });
  }

  render() {
    const {
      isLoading,
      err,
      notes,
    } = this.state;
    // if loading or error you can handle here.
    return (
      <div>
        {notes.map(note => <Note key={note.id} data={note}/>)}
      </div>
    );
  }
}

25
задан snowangel 22 March 2013 в 12:13
поделиться

3 ответа

В основном вам нужно преобразовать имя класса модели во что-то, указывающее на правильный путь.

model_name = m.class.to_s.underscore

А затем используйте его для вызова соответствующих методов пути

link_to "edit", send("edit_#{model_name}_path", m)

В качестве отступления, вам не нужно помещать link_tos в #{}, потому что эта функция просто возвращает строку.

55
ответ дан 28 November 2019 в 17:39
поделиться

Rails предоставляет полиморфные маршруты для решения этой проблемы: http://api.rubyonrails.org/classes/ActionDispatch/Routing/PolymorphicRoutes.html

= link_to "Edit", polymorphic_path(model), :method => :put
48
ответ дан 28 November 2019 в 17:39
поделиться

Я бы использовал частичное для этого - вместо помощника. Везде, где вы хотите отобразить эти ссылки в ваших представлениях, просто визуализируйте частичное:

<%= render :partial => "admin_links", :locals => { :model => model } %>

В _admin_links.html.erb просто вставьте оригинальный код:

<% if current_user %>
  <%= link_to "Edit", edit_model_path(model) %>
  <%= link_to "New", new_model_path %>
  <%= link_to "Delete", model, :confirm => "Your a Noob", :method => :delete %>
<% end %>
3
ответ дан 28 November 2019 в 17:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: