【问题标题】:Rails 3 - Vanity URL based on user attribute that displays a static pageRails 3 - 基于显示静态页面的用户属性的虚 URL
【发布时间】:2013-12-02 14:25:40
【问题描述】:

我想在我的 rails 应用中实现虚 url。我的用户模型中有一个 url 属性。因此,当有人导航到 mycoolapp.com/ 时,他们会被路由到一个静态页面,该页面将根据 url 获取特定的用户信息并将其显示在页面上。我查看了虚荣 URL gem,但不确定它是否适合我。现在我已经像这样手动实现了......

#config/routes
  get 'tommystavern', to: 'static_pages#tommystavern', as: 'tommystavern'

#app/controllers/static_pages_controller.rb
  def tommystavern
    @events = Event.find_all_by_user_id 2
  end

#app/views/static_pages/tommystavern.html.erb
<h1>Tommy's Tavern events</h1>

<table>
  <tr>
    <th>Title</th>
    <th>Starts at</th>
    <th>Description</th>
    <th></th>
    <th></th>
    <th></th>
  </tr>

<% @events.each do |event| %>
  <tr>
    <td><%= event.title %></td>
    <td><%= event.starts_at %></td>
    <td><%= event.description %></td>
  </tr>
<% end %>
</table>

我想在我的控制器中有一个“智能”路由,它可以在我的 User.url 属性中找到 URL,然后将其发送到 app/views/static_pages/home.html.erb 之类的一般页面,该页面将显示基于 URL 的用户事件。有任何想法吗?提前致谢!

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    如果您像这样在路由文件中使用您的用户会怎样:

    User.all.each do |user|
      get user.url, to: 'static_pages#user_profile', :id => user.id
    end
    

    然后在你的控制器中:

    def user_profile
      @user = User.find(params[:id])
      @events = Event.find_all_by_user_id @user.id
    end
    

    然后在你看来:

    <h1><%= @user.name %> events</h1>
    
    <table>
      <tr>
        <th>Title</th>
        <th>Starts at</th>
        <th>Description</th>
        <th></th>
        <th></th>
        <th></th>
      </tr>
    
      <% @events.each do |event| %>
        <tr>
          <td><%= event.title %></td>
          <td><%= event.starts_at %></td>
          <td><%= event.description %></td>
        </tr>
      <% end %>
    </table>
    

    【讨论】:

      【解决方案2】:

      这行得通...与此同时,这就是我所做的...

      #config/routes.rb
        get '/:website', :controller => 'static_pages', :action => 'vanity'
      
      #app/controllers/static_pages_controller.rb
        def vanity
            @user = User.find_by_website(params[:website])
          if @user != nil #in case someone puts in a bogus url I redirect to root
            @events = @user.events
          else
            redirect_to :root
          end
        end
      
      #app/views/static_pages/vanity.html.erb
      <h1><%= @user.website  %> events</h1>
      
      <table>
        <tr>
          <th>Title</th>
          <th>Starts at</th>
          <th>Description</th>
          <th></th>
          <th></th>
          <th></th>
        </tr>
      
      <% @events.each do |event| %>
        <tr>
          <td><%= event.title %></td>
          <td><%= event.starts_at %></td>
          <td><%= event.description %></td>
        </tr>
      <% end %>
      </table>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多