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>
);
}
}
В основном вам нужно преобразовать имя класса модели во что-то, указывающее на правильный путь.
model_name = m.class.to_s.underscore
А затем используйте его для вызова соответствующих методов пути
link_to "edit", send("edit_#{model_name}_path", m)
В качестве отступления, вам не нужно помещать link_tos в #{}
, потому что эта функция просто возвращает строку.
Rails предоставляет полиморфные маршруты для решения этой проблемы: http://api.rubyonrails.org/classes/ActionDispatch/Routing/PolymorphicRoutes.html
= link_to "Edit", polymorphic_path(model), :method => :put
Я бы использовал частичное для этого - вместо помощника. Везде, где вы хотите отобразить эти ссылки в ваших представлениях, просто визуализируйте частичное:
<%= 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 %>