Rails link_to创建无效链接

时间:2015-09-18 15:33:40

标签: ruby-on-rails routing

我使用Ruby on Rails v4,而且我有一个奇怪的问题,我无法找到原因。我有一个rails视图,我试图在其中创建一个简单的记录链接。在我看来,我正在使用

public class Cube extends View {

    private final static String TEST_STRING = "ABC";
    private Paint mBackgroundPaint;
    private Paint mTextPaint;

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public Cube(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        init();
    }

    public Cube(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    public Cube(Context context, AttributeSet attrs) {
        this(context, attrs, -1);
    }

    public Cube(Context context) {
        this(context, null, -1);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        // Just for demo purposes this should be calculated properly
        int desiredWidth = 100;
        int desiredHeight = 100;

        setMeasuredDimension(desiredWidth, desiredHeight);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        int savedCount = canvas.save();
        drawRectangle(canvas);
        drawText(canvas);
        canvas.restoreToCount(savedCount);
    }

    private void init() {
        mBackgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mBackgroundPaint.setColor(Color.BLUE);
        mBackgroundPaint.setStyle(Paint.Style.FILL);

        mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mTextPaint.setStyle(Paint.Style.FILL_AND_STROKE);
        // This need to be adjusted based on the requirements that you have
        mTextPaint.setTextSize(20.0f);

    }

    private void drawRectangle(Canvas canvas) {
        canvas.drawRect(0, 0, getWidth(), getHeight(), mBackgroundPaint);
    }

    private void drawText(Canvas canvas) {
        Rect rect = new Rect();
        // For simplicity I am using a hardcoded string
        mTextPaint.getTextBounds(TEST_STRING, 0, 1, rect);
        int w = getWidth(), h = getHeight();
        float x = (w - rect.width()) / 2, y = ((h - rect.height()) / 2) + rect.height();
        canvas.drawText(TEST_STRING, 0, 1, x, y, mTextPaint);


    }
}

结果是一个看起来像这样的HTML链接

<%= link_to contact.first_name + " " + contact.last_name, contact %>

将我带到我的应用程序的联系页面,而不是向我显示ID为5的联系人。

这就是我的简化routes.rb看起来像

http://someurl.com/contact.5

这些是我的路线:

Rails.application.routes.draw do

  root                'dashboard#index'
  get    'help'    => 'static_pages#help'
  get    'about'   => 'static_pages#about'
  get    'contact' => 'static_pages#contact'

  resources :customers
  resources :contacts

end

当我使用与上面相同的语法链接到客户时,链接工作正常。我弄乱了什么,当链接显示联系时,为什么它会向我发送联系页面.5?

感谢。

2 个答案:

答案 0 :(得分:0)

你的route.rb中的行给出了这个冲突:

download(base64toBlob(response,"application/vnd.apple.pkpass"), filename.replace(/\"/g,''), mime);

答案 1 :(得分:0)

这是因为您已经定义了提供contact_url帮助程序的路线:

get    'contact' => 'static_pages#contact'

这意味着您可以使用contact_urlcontact_path来获取静态联系页面的路线。

当rails尝试链接到对象时,它使用该对象类型的url helper方法。因此,当您执行link_to(..., contact)时,它会使用现有的contact_url方法生成路由。

您也可以在rake routes输出中看到(客户和联系人之间)的差异。对于客户,您可以获得#show操作行的不同输出:

customer GET    /customers/:id(.:format)                customers#show

对于联系人contact,但遗失了:

         GET    /contacts/:id(.:format)                 contacts#show

因为已经定义了contact路由。

您可以通过为静态联系路由定义不同的名称来解决问题:

get 'contact', to: 'static_pages#contact', as: :static_contact